456f618685
Co-authored-by: HWLAB Code Queue <code-queue@pikastech.local>
1129 lines
44 KiB
JSON
1129 lines
44 KiB
JSON
{
|
|
"$schema": "https://hwlab.pikastech.local/schemas/dev-gate-report.schema.json",
|
|
"$id": "https://hwlab.pikastech.local/reports/dev-gate/dev-deploy-report.json",
|
|
"reportVersion": "v1",
|
|
"issue": "pikasTech/HWLAB#33",
|
|
"supports": [
|
|
"pikasTech/HWLAB#63",
|
|
"pikasTech/HWLAB#50",
|
|
"pikasTech/HWLAB#7",
|
|
"pikasTech/HWLAB#33",
|
|
"pikasTech/HWLAB#17",
|
|
"pikasTech/HWLAB#32",
|
|
"pikasTech/HWLAB#30"
|
|
],
|
|
"taskId": "dev-deploy-apply",
|
|
"commitId": "7e29522",
|
|
"acceptanceLevel": "dev_deploy_apply",
|
|
"devOnly": true,
|
|
"prodDisabled": true,
|
|
"status": "pass",
|
|
"generatedAt": "2026-05-22T05:33:09.590Z",
|
|
"namespace": "hwlab-dev",
|
|
"endpoint": "http://74.48.78.17:16667",
|
|
"sourceContract": {
|
|
"status": "pass",
|
|
"documents": [
|
|
"docs/dev-acceptance-matrix.md",
|
|
"docs/m0-contract-audit.md",
|
|
"docs/dev-deploy-apply.md",
|
|
"docs/artifact-catalog.md",
|
|
"deploy/README.md"
|
|
],
|
|
"summary": "DEV deploy apply is pinned to hwlab-dev and the frozen HWLAB service IDs"
|
|
},
|
|
"validationCommands": [
|
|
"node --check scripts/validate-dev-gate-report.mjs",
|
|
"node scripts/validate-dev-gate-report.mjs",
|
|
"node --check scripts/dev-deploy-apply.mjs",
|
|
"node --check scripts/src/dev-deploy-apply.mjs",
|
|
"node scripts/dev-deploy-apply.mjs --dry-run --expect-blocked"
|
|
],
|
|
"localSmoke": {
|
|
"status": "not_run",
|
|
"commands": [
|
|
"node scripts/m1-contract-smoke.mjs"
|
|
],
|
|
"evidence": [
|
|
"This deploy apply task did not run local smoke because artifact/executor blockers stop promotion first."
|
|
],
|
|
"summary": "Local smoke remains available but is not a substitute for DEV artifact publish evidence."
|
|
},
|
|
"dryRun": {
|
|
"status": "pass",
|
|
"commands": [
|
|
"node tools/hwlab-cli/bin/hwlab-cli.mjs test e2e --env dev --mvp --dry-run",
|
|
"node scripts/dev-deploy-apply.mjs --dry-run --expect-blocked"
|
|
],
|
|
"evidence": [
|
|
"artifact services checked: 13",
|
|
"expected artifact commit: 7e29522",
|
|
"namespace: hwlab-dev",
|
|
"workloads planned: 13",
|
|
"kubectl executor: /usr/local/bin/kubectl",
|
|
"live health: pass",
|
|
"template job replacements: 2"
|
|
],
|
|
"summary": "DEV dry-run preflight passed."
|
|
},
|
|
"devPreconditions": {
|
|
"status": "pass",
|
|
"requirements": [
|
|
"DEV artifact catalog must contain CI publish evidence and registry digests",
|
|
"kubectl must be available for D601 hwlab-dev and must not target PROD",
|
|
"hwlab-cloud-api /health/live must report serviceId, dev environment, and DB env readiness without exposing secret values",
|
|
"pods, services, configmaps, and image commit tags must be observable in hwlab-dev"
|
|
],
|
|
"summary": "DEV deploy preconditions are satisfied."
|
|
},
|
|
"devDeployApply": {
|
|
"mode": "dry-run",
|
|
"conclusion": {
|
|
"status": "ready",
|
|
"reason": "All DEV-only preconditions passed; human approval is still required before apply.",
|
|
"blockerCount": 0
|
|
},
|
|
"applyBoundary": {
|
|
"currentMode": "dry-run",
|
|
"defaultNoWrite": true,
|
|
"mutationAttempted": false,
|
|
"mutationAllowed": false,
|
|
"applyRequiresFlags": [
|
|
"--apply",
|
|
"--confirm-dev",
|
|
"--confirmed-non-production"
|
|
],
|
|
"writeScope": "kubectl apply -k deploy/k8s/dev, namespace hwlab-dev only; delete/recreate is allowed only for explicitly allowlisted suspended DEV template Jobs",
|
|
"noWriteScope": "source/catalog/k8s validation, optional DEV health probe, kubectl read, replacement planning, and server-side dry-run only",
|
|
"forbiddenActions": [
|
|
"prod-deploy",
|
|
"secret-read",
|
|
"runtime-substitute",
|
|
"unidesk-restart",
|
|
"code-queue-restart",
|
|
"backend-core-restart",
|
|
"heavy-master-e2e",
|
|
"force-push"
|
|
]
|
|
},
|
|
"mutationAttempted": false,
|
|
"target": {
|
|
"environment": "dev",
|
|
"namespace": "hwlab-dev",
|
|
"endpoint": "http://74.48.78.17:16667",
|
|
"prodDisabled": true
|
|
},
|
|
"artifactPlan": {
|
|
"expectedArtifactCommit": "7e29522",
|
|
"deployCommitId": "7e29522",
|
|
"catalogCommitId": "7e29522",
|
|
"sourceCommitId": "7e29522",
|
|
"serviceCommitIds": [
|
|
"7e29522"
|
|
],
|
|
"matchesSourceCommit": true,
|
|
"published": true,
|
|
"registryVerified": true,
|
|
"imageCount": 13,
|
|
"requiredServiceCount": 13,
|
|
"disabledServiceCount": 0,
|
|
"unpublishedServices": []
|
|
},
|
|
"workloadPlan": [
|
|
{
|
|
"kind": "Deployment",
|
|
"name": "hwlab-cloud-api",
|
|
"namespace": "hwlab-dev",
|
|
"replicas": 1,
|
|
"serviceIds": [
|
|
"hwlab-cloud-api"
|
|
],
|
|
"containers": [
|
|
{
|
|
"name": "hwlab-cloud-api",
|
|
"serviceId": "hwlab-cloud-api",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-cloud-api:7e29522"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"kind": "Deployment",
|
|
"name": "hwlab-cloud-web",
|
|
"namespace": "hwlab-dev",
|
|
"replicas": 1,
|
|
"serviceIds": [
|
|
"hwlab-cloud-web"
|
|
],
|
|
"containers": [
|
|
{
|
|
"name": "hwlab-cloud-web",
|
|
"serviceId": "hwlab-cloud-web",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-cloud-web:7e29522"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"kind": "Deployment",
|
|
"name": "hwlab-agent-mgr",
|
|
"namespace": "hwlab-dev",
|
|
"replicas": 1,
|
|
"serviceIds": [
|
|
"hwlab-agent-mgr"
|
|
],
|
|
"containers": [
|
|
{
|
|
"name": "hwlab-agent-mgr",
|
|
"serviceId": "hwlab-agent-mgr",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-agent-mgr:7e29522"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"kind": "Job",
|
|
"name": "hwlab-agent-worker-template",
|
|
"namespace": "hwlab-dev",
|
|
"replicas": 0,
|
|
"serviceIds": [
|
|
"hwlab-agent-worker"
|
|
],
|
|
"containers": [
|
|
{
|
|
"name": "hwlab-agent-worker",
|
|
"serviceId": "hwlab-agent-worker",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-agent-worker:7e29522"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"kind": "Deployment",
|
|
"name": "hwlab-gateway",
|
|
"namespace": "hwlab-dev",
|
|
"replicas": 0,
|
|
"serviceIds": [
|
|
"hwlab-gateway"
|
|
],
|
|
"containers": [
|
|
{
|
|
"name": "hwlab-gateway",
|
|
"serviceId": "hwlab-gateway",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-gateway:7e29522"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"kind": "Deployment",
|
|
"name": "hwlab-gateway-simu",
|
|
"namespace": "hwlab-dev",
|
|
"replicas": 2,
|
|
"serviceIds": [
|
|
"hwlab-gateway-simu"
|
|
],
|
|
"containers": [
|
|
{
|
|
"name": "hwlab-gateway-simu",
|
|
"serviceId": "hwlab-gateway-simu",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-gateway-simu:7e29522"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"kind": "Deployment",
|
|
"name": "hwlab-box-simu",
|
|
"namespace": "hwlab-dev",
|
|
"replicas": 2,
|
|
"serviceIds": [
|
|
"hwlab-box-simu"
|
|
],
|
|
"containers": [
|
|
{
|
|
"name": "hwlab-box-simu",
|
|
"serviceId": "hwlab-box-simu",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-box-simu:7e29522"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"kind": "Deployment",
|
|
"name": "hwlab-patch-panel",
|
|
"namespace": "hwlab-dev",
|
|
"replicas": 1,
|
|
"serviceIds": [
|
|
"hwlab-patch-panel"
|
|
],
|
|
"containers": [
|
|
{
|
|
"name": "hwlab-patch-panel",
|
|
"serviceId": "hwlab-patch-panel",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-patch-panel:7e29522"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"kind": "Deployment",
|
|
"name": "hwlab-router",
|
|
"namespace": "hwlab-dev",
|
|
"replicas": 1,
|
|
"serviceIds": [
|
|
"hwlab-router"
|
|
],
|
|
"containers": [
|
|
{
|
|
"name": "hwlab-router",
|
|
"serviceId": "hwlab-router",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-router:7e29522"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"kind": "Deployment",
|
|
"name": "hwlab-tunnel-client",
|
|
"namespace": "hwlab-dev",
|
|
"replicas": 1,
|
|
"serviceIds": [
|
|
"hwlab-tunnel-client"
|
|
],
|
|
"containers": [
|
|
{
|
|
"name": "hwlab-tunnel-client",
|
|
"serviceId": "hwlab-tunnel-client",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-tunnel-client:7e29522"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"kind": "Deployment",
|
|
"name": "hwlab-edge-proxy",
|
|
"namespace": "hwlab-dev",
|
|
"replicas": 1,
|
|
"serviceIds": [
|
|
"hwlab-edge-proxy"
|
|
],
|
|
"containers": [
|
|
{
|
|
"name": "hwlab-edge-proxy",
|
|
"serviceId": "hwlab-edge-proxy",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-edge-proxy:7e29522"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"kind": "Job",
|
|
"name": "hwlab-cli-template",
|
|
"namespace": "hwlab-dev",
|
|
"replicas": 0,
|
|
"serviceIds": [
|
|
"hwlab-cli"
|
|
],
|
|
"containers": [
|
|
{
|
|
"name": "hwlab-cli",
|
|
"serviceId": "hwlab-cli",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-cli:7e29522"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"kind": "Deployment",
|
|
"name": "hwlab-agent-skills",
|
|
"namespace": "hwlab-dev",
|
|
"replicas": 1,
|
|
"serviceIds": [
|
|
"hwlab-agent-skills"
|
|
],
|
|
"containers": [
|
|
{
|
|
"name": "hwlab-agent-skills",
|
|
"serviceId": "hwlab-agent-skills",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-agent-skills:7e29522"
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"servicePlan": [
|
|
{
|
|
"kind": "Service",
|
|
"name": "hwlab-cloud-api",
|
|
"namespace": "hwlab-dev",
|
|
"serviceId": "hwlab-cloud-api",
|
|
"type": "ClusterIP",
|
|
"ports": [
|
|
{
|
|
"name": "http",
|
|
"port": 6667,
|
|
"targetPort": "http"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"kind": "Service",
|
|
"name": "hwlab-cloud-web",
|
|
"namespace": "hwlab-dev",
|
|
"serviceId": "hwlab-cloud-web",
|
|
"type": "ClusterIP",
|
|
"ports": [
|
|
{
|
|
"name": "http",
|
|
"port": 8080,
|
|
"targetPort": "http"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"kind": "Service",
|
|
"name": "hwlab-gateway",
|
|
"namespace": "hwlab-dev",
|
|
"serviceId": "hwlab-gateway",
|
|
"type": "ClusterIP",
|
|
"ports": [
|
|
{
|
|
"name": "http",
|
|
"port": 7001,
|
|
"targetPort": "http"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"kind": "Service",
|
|
"name": "hwlab-cli",
|
|
"namespace": "hwlab-dev",
|
|
"serviceId": "hwlab-cli",
|
|
"type": "ClusterIP",
|
|
"ports": [
|
|
{
|
|
"name": "http",
|
|
"port": 7501,
|
|
"targetPort": "http"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"kind": "Service",
|
|
"name": "hwlab-agent-skills",
|
|
"namespace": "hwlab-dev",
|
|
"serviceId": "hwlab-agent-skills",
|
|
"type": "ClusterIP",
|
|
"ports": [
|
|
{
|
|
"name": "http",
|
|
"port": 7430,
|
|
"targetPort": "http"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"kind": "Service",
|
|
"name": "hwlab-agent-mgr",
|
|
"namespace": "hwlab-dev",
|
|
"serviceId": "hwlab-agent-mgr",
|
|
"type": "ClusterIP",
|
|
"ports": [
|
|
{
|
|
"name": "http",
|
|
"port": 7410,
|
|
"targetPort": "http"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"kind": "Service",
|
|
"name": "hwlab-gateway-simu",
|
|
"namespace": "hwlab-dev",
|
|
"serviceId": "hwlab-gateway-simu",
|
|
"type": "ClusterIP",
|
|
"ports": [
|
|
{
|
|
"name": "http",
|
|
"port": 7101,
|
|
"targetPort": "http"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"kind": "Service",
|
|
"name": "hwlab-box-simu",
|
|
"namespace": "hwlab-dev",
|
|
"serviceId": "hwlab-box-simu",
|
|
"type": "ClusterIP",
|
|
"ports": [
|
|
{
|
|
"name": "http",
|
|
"port": 7201,
|
|
"targetPort": "http"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"kind": "Service",
|
|
"name": "hwlab-patch-panel",
|
|
"namespace": "hwlab-dev",
|
|
"serviceId": "hwlab-patch-panel",
|
|
"type": "ClusterIP",
|
|
"ports": [
|
|
{
|
|
"name": "http",
|
|
"port": 7301,
|
|
"targetPort": "http"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"kind": "Service",
|
|
"name": "hwlab-router",
|
|
"namespace": "hwlab-dev",
|
|
"serviceId": "hwlab-router",
|
|
"type": "ClusterIP",
|
|
"ports": [
|
|
{
|
|
"name": "http",
|
|
"port": 7401,
|
|
"targetPort": "http"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"kind": "Service",
|
|
"name": "hwlab-tunnel-client",
|
|
"namespace": "hwlab-dev",
|
|
"serviceId": "hwlab-tunnel-client",
|
|
"type": "ClusterIP",
|
|
"ports": [
|
|
{
|
|
"name": "http",
|
|
"port": 7402,
|
|
"targetPort": "http"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"kind": "Service",
|
|
"name": "hwlab-edge-proxy",
|
|
"namespace": "hwlab-dev",
|
|
"serviceId": "hwlab-edge-proxy",
|
|
"type": "ClusterIP",
|
|
"ports": [
|
|
{
|
|
"name": "http",
|
|
"port": 6667,
|
|
"targetPort": "http"
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"templateJobReplacementPolicy": {
|
|
"status": "active",
|
|
"namespace": "hwlab-dev",
|
|
"scope": "DEV-only suspended template Jobs",
|
|
"allowedJobs": [
|
|
{
|
|
"name": "hwlab-agent-worker-template",
|
|
"serviceId": "hwlab-agent-worker",
|
|
"reason": "suspended session worker template Job has immutable spec.template"
|
|
},
|
|
{
|
|
"name": "hwlab-cli-template",
|
|
"serviceId": "hwlab-cli",
|
|
"reason": "suspended CLI template Job has immutable spec.template"
|
|
}
|
|
]
|
|
},
|
|
"templateJobReplacements": [
|
|
{
|
|
"namespace": "hwlab-dev",
|
|
"jobName": "hwlab-agent-worker-template",
|
|
"allowed": true,
|
|
"desiredSuspended": true,
|
|
"liveExists": true,
|
|
"liveSuspended": true,
|
|
"oldImage": "127.0.0.1:5000/hwlab/hwlab-agent-worker:cb35ada",
|
|
"newImage": "127.0.0.1:5000/hwlab/hwlab-agent-worker:7e29522",
|
|
"oldImages": [
|
|
{
|
|
"name": "hwlab-agent-worker",
|
|
"serviceId": "hwlab-agent-worker",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-agent-worker:cb35ada"
|
|
}
|
|
],
|
|
"newImages": [
|
|
{
|
|
"name": "hwlab-agent-worker",
|
|
"serviceId": "hwlab-agent-worker",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-agent-worker:7e29522"
|
|
}
|
|
],
|
|
"replace": true,
|
|
"result": "planned",
|
|
"reason": "Live suspended template Job image differs from the desired manifest; delete/recreate is required because spec.template is immutable."
|
|
},
|
|
{
|
|
"namespace": "hwlab-dev",
|
|
"jobName": "hwlab-cli-template",
|
|
"allowed": true,
|
|
"desiredSuspended": true,
|
|
"liveExists": true,
|
|
"liveSuspended": true,
|
|
"oldImage": "127.0.0.1:5000/hwlab/hwlab-cli:cb35ada",
|
|
"newImage": "127.0.0.1:5000/hwlab/hwlab-cli:7e29522",
|
|
"oldImages": [
|
|
{
|
|
"name": "hwlab-cli",
|
|
"serviceId": "hwlab-cli",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-cli:cb35ada"
|
|
}
|
|
],
|
|
"newImages": [
|
|
{
|
|
"name": "hwlab-cli",
|
|
"serviceId": "hwlab-cli",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-cli:7e29522"
|
|
}
|
|
],
|
|
"replace": true,
|
|
"result": "planned",
|
|
"reason": "Live suspended template Job image differs from the desired manifest; delete/recreate is required because spec.template is immutable."
|
|
}
|
|
],
|
|
"applyStep": {
|
|
"status": "pass",
|
|
"command": "kubectl apply --dry-run=server -k deploy/k8s/dev",
|
|
"stdout": "namespace/hwlab-dev unchanged (server dry run)\nconfigmap/hwlab-dev-health-contract configured (server dry run)\nservice/hwlab-agent-mgr unchanged (server dry run)\nservice/hwlab-agent-skills unchanged (server dry run)\nservice/hwlab-box-simu unchanged (server dry run)\nservice/hwlab-cli unchanged (server dry run)\nservice/hwlab-cloud-api unchanged (server dry run)\nservice/hwlab-cloud-web unchanged (server dry run)\nservice/hwlab-edge-proxy unchanged (server dry run)\nservice/hwlab-gateway unchanged (server dry run)\nservice/hwlab-gateway-simu unchanged (server dry run)\nservice/hwlab-patch-panel unchanged (server dry run)\nservice/hwlab-router unchanged (server dry run)\nservice/hwlab-tunnel-client unchanged (server dry run)\ndeployment.apps/hwlab-agent-mgr configured (server dry run)\ndeployment.apps/hwlab-agent-skills configured (server dry run)\ndeployment.apps/hwlab-box-simu configured (server dry run)\ndeployment.apps/hwlab-cloud-api configured (server dry run)\ndeployment.apps/hwlab-cloud-web configured (server dry run)\ndeployment.apps/hwlab-edge-proxy configured (server dry run)\ndeployment.apps/hwlab-gateway configured (server dry run)\ndeployment.apps/hwlab-gateway-simu configured (server dry run)\ndeployment.apps/hwlab-patch-panel configured (server dry run)\ndeployment.apps/hwlab-router configured (server dry run)\ndeployment.apps/hwlab-tunnel-client configured (server dry run)",
|
|
"stderr": "# Warning: 'commonLabels' is deprecated. Please use 'labels' instead. Run 'kustomize edit fix' to update your Kustomization automatically.\n# Warning: 'commonLabels' is deprecated. Please use 'labels' instead. Run 'kustomize edit fix' to update your Kustomization automatically.\nError from server (Invalid): error when applying patch:\n{\"metadata\":{\"annotations\":{\"kubectl.kubernetes.io/last-applied-configuration\":\"{\\\"apiVersion\\\":\\\"batch/v1\\\",\\\"kind\\\":\\\"Job\\\",\\\"metadata\\\":{\\\"annotations\\\":{},\\\"labels\\\":{\\\"app.kubernetes.io/name\\\":\\\"hwlab-agent-worker\\\",\\\"app.kubernetes.io/part-of\\\":\\\"hwlab\\\",\\\"hwlab.pikastech.local/environment\\\":\\\"dev\\\",\\\"hwlab.pikastech.local/profile\\\":\\\"dev\\\",\\\"hwlab.pikastech.local/service-id\\\":\\\"hwlab-agent-worker\\\"},\\\"name\\\":\\\"hwlab-agent-worker-template\\\",\\\"namespace\\\":\\\"hwlab-dev\\\"},\\\"spec\\\":{\\\"suspend\\\":true,\\\"template\\\":{\\\"metadata\\\":{\\\"labels\\\":{\\\"app.kubernetes.io/name\\\":\\\"hwlab-agent-worker\\\",\\\"app.kubernetes.io/part-of\\\":\\\"hwlab\\\",\\\"hwlab.pikastech.local/environment\\\":\\\"dev\\\",\\\"hwlab.pikastech.local/profile\\\":\\\"dev\\\",\\\"hwlab.pikastech.local/service-id\\\":\\\"hwlab-agent-worker\\\"}},\\\"spec\\\":{\\\"containers\\\":[{\\\"env\\\":[{\\\"name\\\":\\\"HWLAB_AGENT_SESSION_MODE\\\",\\\"value\\\":\\\"session-scoped\\\"}],\\\"image\\\":\\\"127.0.0.1:5000/hwlab/hwlab-agent-worker:7e29522\\\",\\\"name\\\":\\\"hwlab-agent-worker\\\"}],\\\"restartPolicy\\\":\\\"Never\\\"}}}}\\n\"}},\"spec\":{\"template\":{\"spec\":{\"$setElementOrder/containers\":[{\"name\":\"hwlab-agent-worker\"}],\"containers\":[{\"image\":\"127.0.0.1:5000/hwlab/hwlab-agent-worker:7e29522\",\"name\":\"hwlab-agent-worker\"}]}}}}\nto:\nResource: \"batch/v1, Resource=jobs\", GroupVersionKind: \"batch/v1, Kind=Job\"\nName: \"hwlab-agent-worker-template\", Namespace: \"hwlab-dev\"\nfor: \"deploy/k8s/dev\": error when patching \"deploy/k8s/dev\": Job.batch \"hwlab-agent-worker-template\" is invalid: spec.template: Invalid value: {\"labels\":{\"app.kubernetes.io/name\":\"hwlab-agent-worker\",\"app.kubernetes.io/part-of\":\"hwlab\",\"batch.kubernetes.io/controller-uid\":\"0f7b16d1-562b-40a3-8ff8-961c10d1b182\",\"batch.kubernetes.io/job-name\":\"hwlab-agent-worker-template\",\"controller-uid\":\"0f7b16d1-562b-40a3-8ff8-961c10d1b182\",\"hwlab.pikastech.local/environment\":\"dev\",\"hwlab.pikastech.local/profile\":\"dev\",\"hwlab.pikastech.local/service-id\":\"hwlab-agent-worker\",\"job-name\":\"hwlab-agent-worker-template\"},\"Spec\":{\"Volumes\":null,\"InitContainers\":null,\"Containers\":[{\"Name\":\"hwlab-agent-worker\",\"Image\":\"127.0.0.1:5000/hwlab/hwlab-agent-worker:7e29522\",\"Command\":null,\"Args\":null,\"WorkingDir\":\"\",\"Ports\":null,\"EnvFrom\":null,\"Env\":[{\"Name\":\"HWLAB_AGENT_SESSION_MODE\",\"Value\":\"session-scoped\",\"ValueFrom\":null}],\"Resources\":{\"Limits\":null,\"Requests\":null,\"Claims\":null},\"ResizePolicy\":null,\"RestartPolicy\":null,\"RestartPolicyRules\":null,\"VolumeMounts\":null,\"VolumeDevices\":null,\"LivenessProbe\":null,\"ReadinessProbe\":null,\"StartupProbe\":null,\"Lifecycle\":null,\"TerminationMessagePath\":\"/dev/termination-log\",\"TerminationMessagePolicy\":\"File\",\"ImagePullPolicy\":\"IfNotPresent\",\"SecurityContext\":null,\"Stdin\":false,\"StdinOnce\":false,\"TTY\":false}],\"EphemeralContainers\":null,\"RestartPolicy\":\"Never\",\"TerminationGracePeriodSeconds\":30,\"ActiveDeadlineSeconds\":null,\"DNSPolicy\":\"ClusterFirst\",\"NodeSelector\":null,\"ServiceAccountName\":\"\",\"AutomountServiceAccountToken\":null,\"NodeName\":\"\",\"SecurityContext\":{\"HostNetwork\":false,\"HostPID\":false,\"HostIPC\":false,\"ShareProcessNamespace\":null,\"HostUsers\":null,\"SELinuxOptions\":null,\"WindowsOptions\":null,\"RunAsUser\":null,\"RunAsGroup\":null,\"RunAsNonRoot\":null,\"SupplementalGroups\":null,\"SupplementalGroupsPolicy\":null,\"FSGroup\":null,\"FSGroupChangePolicy\":null,\"Sysctls\":null,\"SeccompProfile\":null,\"AppArmorProfile\":null,\"SELinuxChangePolicy\":null},\"ImagePullSecrets\":null,\"Hostname\":\"\",\"Subdomain\":\"\",\"SetHostnameAsFQDN\":null,\"Affinity\":null,\"SchedulerName\":\"default-scheduler\",\"Tolerations\":null,\"HostAliases\":null,\"PriorityClassName\":\"\",\"Priority\":null,\"PreemptionPolicy\":null,\"DNSConfig\":null,\"ReadinessGates\":null,\"RuntimeClassName\":null,\"Overhead\":null,\"EnableServiceLinks\":null,\"TopologySpreadConstraints\":null,\"OS\":null,\"SchedulingGates\":null,\"ResourceClaims\":null,\"Resources\":null,\"HostnameOverride\":null}}: field is immutable\nError from server (Invalid): error when applying patch:\n{\"metadata\":{\"annotations\":{\"kubectl.kubernetes.io/last-applied-configuration\":\"{\\\"apiVersion\\\":\\\"batch/v1\\\",\\\"kind\\\":\\\"Job\\\",\\\"metadata\\\":{\\\"annotations\\\":{},\\\"labels\\\":{\\\"app.kubernetes.io/name\\\":\\\"hwlab-cli\\\",\\\"app.kubernetes.io/part-of\\\":\\\"hwlab\\\",\\\"hwlab.pikastech.local/activation\\\":\\\"manual\\\",\\\"hwlab.pikastech.local/environment\\\":\\\"dev\\\",\\\"hwlab.pikastech.local/profile\\\":\\\"dev\\\",\\\"hwlab.pikastech.local/service-id\\\":\\\"hwlab-cli\\\"},\\\"name\\\":\\\"hwlab-cli-template\\\",\\\"namespace\\\":\\\"hwlab-dev\\\"},\\\"spec\\\":{\\\"suspend\\\":true,\\\"template\\\":{\\\"metadata\\\":{\\\"labels\\\":{\\\"app.kubernetes.io/name\\\":\\\"hwlab-cli\\\",\\\"app.kubernetes.io/part-of\\\":\\\"hwlab\\\",\\\"hwlab.pikastech.local/environment\\\":\\\"dev\\\",\\\"hwlab.pikastech.local/profile\\\":\\\"dev\\\",\\\"hwlab.pikastech.local/service-id\\\":\\\"hwlab-cli\\\"}},\\\"spec\\\":{\\\"containers\\\":[{\\\"env\\\":[{\\\"name\\\":\\\"HWLAB_CLI_ENDPOINT\\\",\\\"value\\\":\\\"http://74.48.78.17:16667\\\"}],\\\"image\\\":\\\"127.0.0.1:5000/hwlab/hwlab-cli:7e29522\\\",\\\"name\\\":\\\"hwlab-cli\\\"}],\\\"restartPolicy\\\":\\\"Never\\\"}}}}\\n\"}},\"spec\":{\"template\":{\"spec\":{\"$setElementOrder/containers\":[{\"name\":\"hwlab-cli\"}],\"containers\":[{\"image\":\"127.0.0.1:5000/hwlab/hwlab-cli:7e29522\",\"name\":\"hwlab-cli\"}]}}}}\nto:\nResource: \"batch/v1, Resource=jobs\", GroupVersionKind: \"batch/v1, Kind=Job\"\nName: \"hwlab-cli-template\", Namespace: \"hwlab-dev\"\nfor: \"deploy/k8s/dev\": error when patching \"deploy/k8s/dev\": Job.batch \"hwlab-cli-template\" is invalid: spec.template: Invalid value: {\"labels\":{\"app.kubernetes.io/name\":\"hwlab-cli\",\"app.kubernetes.io/part-of\":\"hwlab\",\"batch.kubernetes.io/controller-uid\":\"ce763736-b67b-400c-8a09-5b3f62019b09\",\"batch.kubernetes.io/job-name\":\"hwlab-cli-template\",\"controller-uid\":\"ce763736-b67b-400c-8a09-5b3f62019b09\",\"hwlab.pikastech.local/environment\":\"dev\",\"hwlab.pikastech.local/profile\":\"dev\",\"hwlab.pikastech.local/service-id\":\"hwlab-cli\",\"job-name\":\"hwlab-cli-template\"},\"Spec\":{\"Volumes\":null,\"InitContainers\":null,\"Containers\":[{\"Name\":\"hwlab-cli\",\"Image\":\"127.0.0.1:5000/hwlab/hwlab-cli:7e29522\",\"Command\":null,\"Args\":null,\"WorkingDir\":\"\",\"Ports\":null,\"EnvFrom\":null,\"Env\":[{\"Name\":\"HWLAB_CLI_ENDPOINT\",\"Value\":\"http://74.48.78.17:16667\",\"ValueFrom\":null}],\"Resources\":{\"Limits\":null,\"Requests\":null,\"Claims\":null},\"ResizePolicy\":null,\"RestartPolicy\":null,\"RestartPolicyRules\":null,\"VolumeMounts\":null,\"VolumeDevices\":null,\"LivenessProbe\":null,\"ReadinessProbe\":null,\"StartupProbe\":null,\"Lifecycle\":null,\"TerminationMessagePath\":\"/dev/termination-log\",\"TerminationMessagePolicy\":\"File\",\"ImagePullPolicy\":\"IfNotPresent\",\"SecurityContext\":null,\"Stdin\":false,\"StdinOnce\":false,\"TTY\":false}],\"EphemeralContainers\":null,\"RestartPolicy\":\"Never\",\"TerminationGracePeriodSeconds\":30,\"ActiveDeadlineSeconds\":null,\"DNSPolicy\":\"ClusterFirst\",\"NodeSelector\":null,\"ServiceAccountName\":\"\",\"AutomountServiceAccountToken\":null,\"NodeName\":\"\",\"SecurityContext\":{\"HostNetwork\":false,\"HostPID\":false,\"HostIPC\":false,\"ShareProcessNamespace\":null,\"HostUsers\":null,\"SELinuxOptions\":null,\"WindowsOptions\":null,\"RunAsUser\":null,\"RunAsGroup\":null,\"RunAsNonRoot\":null,\"SupplementalGroups\":null,\"SupplementalGroupsPolicy\":null,\"FSGroup\":null,\"FSGroupChangePolicy\":null,\"Sysctls\":null,\"SeccompProfile\":null,\"AppArmorProfile\":null,\"SELinuxChangePolicy\":null},\"ImagePullSecrets\":null,\"Hostname\":\"\",\"Subdomain\":\"\",\"SetHostnameAsFQDN\":null,\"Affinity\":null,\"SchedulerName\":\"default-scheduler\",\"Tolerations\":null,\"HostAliases\":null,\"PriorityClassName\":\"\",\"Priority\":null,\"PreemptionPolicy\":null,\"DNSConfig\":null,\"ReadinessGates\":null,\"RuntimeClassName\":null,\"Overhead\":null,\"EnableServiceLinks\":null,\"TopologySpreadConstraints\":null,\"OS\":null,\"SchedulingGates\":null,\"ResourceClaims\":null,\"Resources\":null,\"HostnameOverride\":null}}: field is immutable",
|
|
"mutationAttempted": false,
|
|
"expectedImmutableTemplateJobDryRun": true,
|
|
"expectedImmutableTemplateJobs": [
|
|
"hwlab-agent-worker-template",
|
|
"hwlab-cli-template"
|
|
]
|
|
},
|
|
"manualCommands": {
|
|
"status": "ready",
|
|
"beforeHumanApproval": [
|
|
"node scripts/dev-deploy-apply.mjs --dry-run --write-report",
|
|
"node scripts/validate-dev-gate-report.mjs"
|
|
],
|
|
"afterHumanApproval": [
|
|
"node scripts/dev-deploy-apply.mjs --apply --confirm-dev --confirmed-non-production --write-report"
|
|
],
|
|
"summary": "Run the dry-run plan and validator immediately before requesting human approval; live apply still requires the explicit DEV confirmation flags."
|
|
},
|
|
"rollbackHint": {
|
|
"namespace": "hwlab-dev",
|
|
"strategy": "DEV-only Kubernetes rollback using deployment revision history; do not touch PROD or UniDesk services.",
|
|
"captureBeforeApply": [
|
|
"kubectl -n hwlab-dev get pods,services,configmaps,deployments,jobs -o wide",
|
|
"kubectl -n hwlab-dev get deployments -o json"
|
|
],
|
|
"deploymentRollbackCommands": [
|
|
"kubectl -n hwlab-dev rollout undo deployment/hwlab-cloud-api",
|
|
"kubectl -n hwlab-dev rollout undo deployment/hwlab-cloud-web",
|
|
"kubectl -n hwlab-dev rollout undo deployment/hwlab-agent-mgr",
|
|
"kubectl -n hwlab-dev rollout undo deployment/hwlab-gateway",
|
|
"kubectl -n hwlab-dev rollout undo deployment/hwlab-gateway-simu",
|
|
"kubectl -n hwlab-dev rollout undo deployment/hwlab-box-simu",
|
|
"kubectl -n hwlab-dev rollout undo deployment/hwlab-patch-panel",
|
|
"kubectl -n hwlab-dev rollout undo deployment/hwlab-router",
|
|
"kubectl -n hwlab-dev rollout undo deployment/hwlab-tunnel-client",
|
|
"kubectl -n hwlab-dev rollout undo deployment/hwlab-edge-proxy",
|
|
"kubectl -n hwlab-dev rollout undo deployment/hwlab-agent-skills"
|
|
],
|
|
"jobCleanupCommands": [
|
|
"kubectl -n hwlab-dev delete job hwlab-agent-worker-template --ignore-not-found",
|
|
"kubectl -n hwlab-dev delete job hwlab-cli-template --ignore-not-found"
|
|
],
|
|
"postRollbackChecks": [
|
|
"kubectl -n hwlab-dev rollout status deployment/hwlab-cloud-api --timeout=120s",
|
|
"curl -fsS http://74.48.78.17:16667/health/live"
|
|
]
|
|
},
|
|
"remainingBlockers": [],
|
|
"artifactEvidence": [
|
|
{
|
|
"serviceId": "hwlab-cloud-api",
|
|
"deployCommitId": "7e29522",
|
|
"catalogCommitId": "7e29522",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-cloud-api:7e29522",
|
|
"digest": "sha256:090b6f919be3b3c7594ca4073b193351689fc525f478b64d54d393725cb01ecf",
|
|
"publishState": "published"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-cloud-web",
|
|
"deployCommitId": "7e29522",
|
|
"catalogCommitId": "7e29522",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-cloud-web:7e29522",
|
|
"digest": "sha256:bc6e836b2bb796b30562ed3ae93d8534146a3b74a310906481c8641646d1b8f0",
|
|
"publishState": "published"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-agent-mgr",
|
|
"deployCommitId": "7e29522",
|
|
"catalogCommitId": "7e29522",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-agent-mgr:7e29522",
|
|
"digest": "sha256:4d9b8944bc52012bb0a4a3a345f8939381d2804032e544d0c98f49fac0e46bfd",
|
|
"publishState": "published"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-agent-worker",
|
|
"deployCommitId": "7e29522",
|
|
"catalogCommitId": "7e29522",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-agent-worker:7e29522",
|
|
"digest": "sha256:2582176e2c35a2bfbce4edfd922749397d45f6f1f8c04d0394c501f7d87323ee",
|
|
"publishState": "published"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-gateway",
|
|
"deployCommitId": "7e29522",
|
|
"catalogCommitId": "7e29522",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-gateway:7e29522",
|
|
"digest": "sha256:290341fd6e6f036aa953943072ad58e0d0cfcc0e13950e6090f941b3310755a6",
|
|
"publishState": "published"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-gateway-simu",
|
|
"deployCommitId": "7e29522",
|
|
"catalogCommitId": "7e29522",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-gateway-simu:7e29522",
|
|
"digest": "sha256:02627f880c7ddf2102e2255a43097d1f604cfb7a22215736e328287e27fc5f03",
|
|
"publishState": "published"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-box-simu",
|
|
"deployCommitId": "7e29522",
|
|
"catalogCommitId": "7e29522",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-box-simu:7e29522",
|
|
"digest": "sha256:e02c270c71f83a2f4624722bb84616bea8374ef43439f27bdce310e4baa8dcca",
|
|
"publishState": "published"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-patch-panel",
|
|
"deployCommitId": "7e29522",
|
|
"catalogCommitId": "7e29522",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-patch-panel:7e29522",
|
|
"digest": "sha256:f730323f83c62797f382932582a05df921045c86383dad7951f3d639b32456a9",
|
|
"publishState": "published"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-router",
|
|
"deployCommitId": "7e29522",
|
|
"catalogCommitId": "7e29522",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-router:7e29522",
|
|
"digest": "sha256:7c40c573078a9c325402bd47b2eb78a46c0c80564a228cf7c9fcf0cfba5bc6d2",
|
|
"publishState": "published"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-tunnel-client",
|
|
"deployCommitId": "7e29522",
|
|
"catalogCommitId": "7e29522",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-tunnel-client:7e29522",
|
|
"digest": "sha256:b141dc88557b8f6391aa082fdb37c6f0db5bc3a76c97bb39ba00354a9208abd8",
|
|
"publishState": "published"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-edge-proxy",
|
|
"deployCommitId": "7e29522",
|
|
"catalogCommitId": "7e29522",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-edge-proxy:7e29522",
|
|
"digest": "sha256:792505139793c3f3da7769f9dc9d1cb3203ff92797305b62e8f12207c69a9831",
|
|
"publishState": "published"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-cli",
|
|
"deployCommitId": "7e29522",
|
|
"catalogCommitId": "7e29522",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-cli:7e29522",
|
|
"digest": "sha256:43d1c175091bfb462eddd7dd22a780d6485d86bdb052c36b78201606f48fadc1",
|
|
"publishState": "published"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-agent-skills",
|
|
"deployCommitId": "7e29522",
|
|
"catalogCommitId": "7e29522",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-agent-skills:7e29522",
|
|
"digest": "sha256:c75510038dc33196dc254472e78101d545c0d777a7b33b531f02b39faf2588b5",
|
|
"publishState": "published"
|
|
}
|
|
],
|
|
"cloudApiDb": {
|
|
"status": "contract-ready",
|
|
"requiredEnv": [
|
|
{
|
|
"name": "HWLAB_CLOUD_DB_URL",
|
|
"manifestPresent": true,
|
|
"k8sPresent": true,
|
|
"redacted": true,
|
|
"source": "k8s-secret-ref",
|
|
"secretRef": {
|
|
"secretName": "hwlab-cloud-api-dev-db",
|
|
"secretKey": "database-url",
|
|
"present": true,
|
|
"redacted": true
|
|
}
|
|
},
|
|
{
|
|
"name": "HWLAB_CLOUD_DB_SSL_MODE",
|
|
"manifestPresent": true,
|
|
"k8sPresent": true,
|
|
"redacted": false,
|
|
"source": "runtime-env",
|
|
"secretRef": null
|
|
}
|
|
],
|
|
"missingManifest": [],
|
|
"missingK8s": [],
|
|
"missingSecretRefs": [],
|
|
"runtimeHealth": {
|
|
"status": "degraded",
|
|
"ready": false,
|
|
"configReady": true,
|
|
"connected": false,
|
|
"liveConnected": false,
|
|
"connectionChecked": false,
|
|
"connectionAttempted": false,
|
|
"connectionResult": "unknown",
|
|
"requiredEnv": [
|
|
{
|
|
"name": "HWLAB_CLOUD_DB_URL",
|
|
"present": true,
|
|
"redacted": true
|
|
},
|
|
{
|
|
"name": "HWLAB_CLOUD_DB_SSL_MODE",
|
|
"present": true,
|
|
"redacted": false
|
|
}
|
|
],
|
|
"missingEnv": [],
|
|
"secretRefs": [
|
|
{
|
|
"env": "HWLAB_CLOUD_DB_URL",
|
|
"secretName": "hwlab-cloud-api-dev-db",
|
|
"secretKey": "database-url",
|
|
"present": true,
|
|
"envInjected": true,
|
|
"secretPresent": "not_observed",
|
|
"secretKeyPresent": "not_observed",
|
|
"redacted": true
|
|
}
|
|
],
|
|
"connection": {
|
|
"attempted": false,
|
|
"result": "unknown",
|
|
"endpointRedacted": true,
|
|
"valueRedacted": true
|
|
},
|
|
"blocker": null,
|
|
"liveDbEvidence": false,
|
|
"fixtureEvidence": false
|
|
},
|
|
"secretMaterialRead": false,
|
|
"valuesRedacted": true,
|
|
"liveDbEvidence": false,
|
|
"fixtureEvidence": false,
|
|
"note": "This check records DB env/Secret reference presence only. It is not live DB evidence."
|
|
},
|
|
"k8sManifest": {
|
|
"resourceCounts": {
|
|
"workloads": 13,
|
|
"services": 12,
|
|
"configMaps": 1
|
|
},
|
|
"images": [
|
|
{
|
|
"serviceId": "hwlab-cloud-api",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-cloud-api:7e29522",
|
|
"kind": "Deployment",
|
|
"name": "hwlab-cloud-api"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-cloud-web",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-cloud-web:7e29522",
|
|
"kind": "Deployment",
|
|
"name": "hwlab-cloud-web"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-agent-mgr",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-agent-mgr:7e29522",
|
|
"kind": "Deployment",
|
|
"name": "hwlab-agent-mgr"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-agent-worker",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-agent-worker:7e29522",
|
|
"kind": "Job",
|
|
"name": "hwlab-agent-worker-template"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-gateway",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-gateway:7e29522",
|
|
"kind": "Deployment",
|
|
"name": "hwlab-gateway"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-gateway-simu",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-gateway-simu:7e29522",
|
|
"kind": "Deployment",
|
|
"name": "hwlab-gateway-simu"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-box-simu",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-box-simu:7e29522",
|
|
"kind": "Deployment",
|
|
"name": "hwlab-box-simu"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-patch-panel",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-patch-panel:7e29522",
|
|
"kind": "Deployment",
|
|
"name": "hwlab-patch-panel"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-router",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-router:7e29522",
|
|
"kind": "Deployment",
|
|
"name": "hwlab-router"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-tunnel-client",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-tunnel-client:7e29522",
|
|
"kind": "Deployment",
|
|
"name": "hwlab-tunnel-client"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-edge-proxy",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-edge-proxy:7e29522",
|
|
"kind": "Deployment",
|
|
"name": "hwlab-edge-proxy"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-cli",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-cli:7e29522",
|
|
"kind": "Job",
|
|
"name": "hwlab-cli-template"
|
|
},
|
|
{
|
|
"serviceId": "hwlab-agent-skills",
|
|
"image": "127.0.0.1:5000/hwlab/hwlab-agent-skills:7e29522",
|
|
"kind": "Deployment",
|
|
"name": "hwlab-agent-skills"
|
|
}
|
|
]
|
|
},
|
|
"clusterObservation": {
|
|
"status": "pass",
|
|
"executor": "/usr/local/bin/kubectl",
|
|
"version": "clientVersion:\n buildDate: \"2026-05-12T09:54:35Z\"\n compiler: gc\n gitCommit: 756939600b9a7180fc2df6550a4585b638875e67\n gitTreeState: clean\n gitVersion: v1.36.1\n goVersion: go1.26.2\n major: \"1\"\n minor: \"36\"\n platform: linux/amd64\nkustomizeVersion: v5.8.1",
|
|
"resources": [
|
|
{
|
|
"kind": "Pod",
|
|
"name": "hwlab-agent-mgr-75544c7747-5dzt9",
|
|
"phase": "Running"
|
|
},
|
|
{
|
|
"kind": "Pod",
|
|
"name": "hwlab-agent-skills-849d9976f4-2nsmw",
|
|
"phase": "Running"
|
|
},
|
|
{
|
|
"kind": "Pod",
|
|
"name": "hwlab-box-simu-55688cbcc7-pftxc",
|
|
"phase": "Running"
|
|
},
|
|
{
|
|
"kind": "Pod",
|
|
"name": "hwlab-box-simu-55688cbcc7-sq5fx",
|
|
"phase": "Running"
|
|
},
|
|
{
|
|
"kind": "Pod",
|
|
"name": "hwlab-cloud-api-f48dcdfb-9n6zh",
|
|
"phase": "Running"
|
|
},
|
|
{
|
|
"kind": "Pod",
|
|
"name": "hwlab-cloud-web-cd9655b98-gxtmc",
|
|
"phase": "Running"
|
|
},
|
|
{
|
|
"kind": "Pod",
|
|
"name": "hwlab-edge-proxy-567f978cdd-8fwc8",
|
|
"phase": "Running"
|
|
},
|
|
{
|
|
"kind": "Pod",
|
|
"name": "hwlab-frpc-59f57d479c-wm5l2",
|
|
"phase": "Running"
|
|
},
|
|
{
|
|
"kind": "Pod",
|
|
"name": "hwlab-gateway-simu-699fd486b-j9pk7",
|
|
"phase": "Running"
|
|
},
|
|
{
|
|
"kind": "Pod",
|
|
"name": "hwlab-gateway-simu-699fd486b-phcgp",
|
|
"phase": "Running"
|
|
},
|
|
{
|
|
"kind": "Pod",
|
|
"name": "hwlab-patch-panel-757f9f44d5-7np8r",
|
|
"phase": "Running"
|
|
},
|
|
{
|
|
"kind": "Pod",
|
|
"name": "hwlab-router-5d9cbdf89b-p7r94",
|
|
"phase": "Running"
|
|
},
|
|
{
|
|
"kind": "Pod",
|
|
"name": "hwlab-tunnel-client-65c7858c8-wjqsh",
|
|
"phase": "Running"
|
|
},
|
|
{
|
|
"kind": "Service",
|
|
"name": "hwlab-agent-mgr"
|
|
},
|
|
{
|
|
"kind": "Service",
|
|
"name": "hwlab-agent-skills"
|
|
},
|
|
{
|
|
"kind": "Service",
|
|
"name": "hwlab-box-simu"
|
|
},
|
|
{
|
|
"kind": "Service",
|
|
"name": "hwlab-cli"
|
|
},
|
|
{
|
|
"kind": "Service",
|
|
"name": "hwlab-cloud-api"
|
|
},
|
|
{
|
|
"kind": "Service",
|
|
"name": "hwlab-cloud-web"
|
|
},
|
|
{
|
|
"kind": "Service",
|
|
"name": "hwlab-edge-proxy"
|
|
},
|
|
{
|
|
"kind": "Service",
|
|
"name": "hwlab-gateway"
|
|
},
|
|
{
|
|
"kind": "Service",
|
|
"name": "hwlab-gateway-simu"
|
|
},
|
|
{
|
|
"kind": "Service",
|
|
"name": "hwlab-patch-panel"
|
|
},
|
|
{
|
|
"kind": "Service",
|
|
"name": "hwlab-router"
|
|
},
|
|
{
|
|
"kind": "Service",
|
|
"name": "hwlab-tunnel-client"
|
|
},
|
|
{
|
|
"kind": "ConfigMap",
|
|
"name": "hwlab-dev-health-contract"
|
|
},
|
|
{
|
|
"kind": "ConfigMap",
|
|
"name": "hwlab-frpc-config"
|
|
},
|
|
{
|
|
"kind": "ConfigMap",
|
|
"name": "kube-root-ca.crt"
|
|
},
|
|
{
|
|
"kind": "Deployment",
|
|
"name": "hwlab-agent-mgr",
|
|
"readyReplicas": 1,
|
|
"replicas": 1
|
|
},
|
|
{
|
|
"kind": "Deployment",
|
|
"name": "hwlab-agent-skills",
|
|
"readyReplicas": 1,
|
|
"replicas": 1
|
|
},
|
|
{
|
|
"kind": "Deployment",
|
|
"name": "hwlab-box-simu",
|
|
"readyReplicas": 2,
|
|
"replicas": 2
|
|
},
|
|
{
|
|
"kind": "Deployment",
|
|
"name": "hwlab-cloud-api",
|
|
"readyReplicas": 1,
|
|
"replicas": 1
|
|
},
|
|
{
|
|
"kind": "Deployment",
|
|
"name": "hwlab-cloud-web",
|
|
"readyReplicas": 1,
|
|
"replicas": 1
|
|
},
|
|
{
|
|
"kind": "Deployment",
|
|
"name": "hwlab-edge-proxy",
|
|
"readyReplicas": 1,
|
|
"replicas": 1
|
|
},
|
|
{
|
|
"kind": "Deployment",
|
|
"name": "hwlab-frpc",
|
|
"readyReplicas": 1,
|
|
"replicas": 1
|
|
},
|
|
{
|
|
"kind": "Deployment",
|
|
"name": "hwlab-gateway"
|
|
},
|
|
{
|
|
"kind": "Deployment",
|
|
"name": "hwlab-gateway-simu",
|
|
"readyReplicas": 2,
|
|
"replicas": 2
|
|
},
|
|
{
|
|
"kind": "Deployment",
|
|
"name": "hwlab-patch-panel",
|
|
"readyReplicas": 1,
|
|
"replicas": 1
|
|
},
|
|
{
|
|
"kind": "Deployment",
|
|
"name": "hwlab-router",
|
|
"readyReplicas": 1,
|
|
"replicas": 1
|
|
},
|
|
{
|
|
"kind": "Deployment",
|
|
"name": "hwlab-tunnel-client",
|
|
"readyReplicas": 1,
|
|
"replicas": 1
|
|
},
|
|
{
|
|
"kind": "Job",
|
|
"name": "hwlab-agent-worker-template"
|
|
},
|
|
{
|
|
"kind": "Job",
|
|
"name": "hwlab-cli-template"
|
|
}
|
|
]
|
|
},
|
|
"liveProbe": {
|
|
"status": "pass",
|
|
"url": "http://74.48.78.17:16667/health/live",
|
|
"httpStatus": 200,
|
|
"body": "{\"serviceId\":\"hwlab-cloud-api\",\"environment\":\"dev\",\"status\":\"degraded\",\"service\":{\"id\":\"hwlab-cloud-api\",\"role\":\"cloud-api\",\"healthPath\":\"/health\",\"livePath\":\"/health/live\"},\"commit\":{\"id\":\"cb35ada\",\"source\":\"runtime-env\"},\"image\":{\"reference\":\"127.0.0.1:5000/hwlab/hwlab-cloud-api:cb35ada\",\"tag\":\"cb35ada\",\"digest\":\"unknown\"},\"endpoint\":\"http://74.48.78.17:16667\",\"observedAt\":\"2026-05-22T05:33:08.461Z\",\"db\":{\"contractVersion\":\"v1\",\"environment\":\"dev\",\"connected\":false,\"connectionChecked\":false,\"c"
|
|
}
|
|
},
|
|
"blockers": [],
|
|
"notes": "DEV-only result. No PROD resources, secret values, force push, heavy e2e, browser e2e, or UniDesk runtime substitute were used."
|
|
}
|