# ── v4-pro 变体 worker(serverV4pro.enabled 开关;2026-07-11 从手工 kubectl 资源收编进 chart:
#    与主 sema-server 同镜像/同 env 面,仅 MODEL_ID 不同;复用 sema-server-env secret。
#    as-built 忠实:无 topologySpreadConstraints(单副本手工建时即无,避免收编时触发滚动)。
#    公网入口=Gcore LB listener 8091 → NodePort {{ .Values.serverV4pro.nodePort }}(LB 面不归 chart 管)。──
{{- if .Values.serverV4pro.enabled }}
apiVersion: apps/v1
kind: Deployment
metadata:
  name: sema-server-v4pro
  namespace: {{ .Release.Namespace }}
  labels: { app: sema-server-v4pro }
spec:
  replicas: {{ .Values.serverV4pro.replicas }}
  selector:
    matchLabels: { app: sema-server-v4pro }
  template:
    metadata:
      labels: { app: sema-server-v4pro }
    spec:
{{- with .Values.imagePullSecrets }}
      imagePullSecrets:
{{- range . }}
        - name: {{ . }}
{{- end }}
{{- end }}
      containers:
        - name: server
          image: {{ .Values.serverV4pro.image | default (required "server.image is required" .Values.server.image) | quote }}
          imagePullPolicy: {{ .Values.server.pullPolicy }}
          ports: [{ containerPort: 8090 }]
          env:
            - { name: PORT, value: "8090" }
            - { name: DB_BACKEND, value: pg }
            - { name: SESSION_BACKEND, value: auto }
            - { name: PG_HOST, value: sema-pg-rw.{{ .Release.Namespace }}.svc }
            - { name: PG_PORT, value: "5432" }
            - { name: PG_USER, value: sema }
            - { name: PG_DATABASE, value: sema }
            - { name: PG_PASSWORD, valueFrom: { secretKeyRef: { name: sema-pg-app, key: password } } }
            - { name: MINIO_ENDPOINT, value: "http://sema-minio.{{ .Release.Namespace }}.svc:9000" }
            - { name: MINIO_ACCESS_KEY, valueFrom: { secretKeyRef: { name: sema-minio, key: rootUser } } }
            - { name: MINIO_SECRET_KEY, valueFrom: { secretKeyRef: { name: sema-minio, key: rootPassword } } }
{{- /* SendUserFile 公网直链(可选;与 server.yaml 同面,见该模板注释)。 */}}
{{- if .Values.server.s3PublicEndpoint }}
            - { name: S3_PUBLIC_ENDPOINT, value: {{ .Values.server.s3PublicEndpoint | quote }} }
{{- end }}
{{- if .Values.server.s3PublicBucket }}
            - { name: S3_PUBLIC_BUCKET, value: {{ .Values.server.s3PublicBucket | quote }} }
{{- end }}
{{- if .Values.server.sendUserFileSandboxPutEndpoint }}
            - { name: SEND_USER_FILE_SANDBOX_PUT_ENDPOINT, value: {{ .Values.server.sendUserFileSandboxPutEndpoint | quote }} }
{{- end }}
            - { name: SERVICE_AUTH_TOKEN, valueFrom: { secretKeyRef: { name: sema-server-env, key: SERVICE_AUTH_TOKEN } } }
            - { name: MODEL_GATEWAY_BASEURL, value: {{ required "server.modelGatewayBaseurl is required" .Values.server.modelGatewayBaseurl | quote }} }
            - { name: MODEL_ID, value: {{ required "serverV4pro.modelId is required" .Values.serverV4pro.modelId | quote }} }
            - { name: MODEL_API_KEY, valueFrom: { secretKeyRef: { name: sema-server-env, key: MODEL_API_KEY } } }
            - { name: MODEL_VISION, value: {{ .Values.server.modelVision | quote }} }
            - { name: SANDBOX_PKG_SOURCE, value: {{ .Values.server.sandboxPkgSource | quote }} }
            - { name: REMOTE_EXEC, value: k8s }
            - { name: K8S_API_URL, value: "https://kubernetes.default.svc" }
{{- if .Values.server.k8sInsecureTls }}
            - { name: K8S_INSECURE_TLS, value: "true" }
{{- end }}
            - { name: K8S_NAMESPACE, value: {{ .Values.sandbox.namespace }} }
            - { name: K8S_RUNTIME_CLASS, value: {{ .Values.sandbox.runtimeClass }} }
            - { name: K8S_SANDBOX_IMAGE, value: {{ .Values.sandbox.image | quote }} }
            - { name: K8S_TOKEN, valueFrom: { secretKeyRef: { name: sema-runner-token-copy, key: token } } }
          readinessProbe:
            httpGet: { path: /health, port: 8090 }
            initialDelaySeconds: 5
            periodSeconds: 5
---
apiVersion: v1
kind: Service
metadata:
  name: sema-server-v4pro
  namespace: {{ .Release.Namespace }}
  labels: { app: sema-server-v4pro }
spec:
  type: NodePort
  selector: { app: sema-server-v4pro }
  ports:
    - port: 8090
      targetPort: 8090
      nodePort: {{ .Values.serverV4pro.nodePort }}
{{- end }}
