{{- $game := fromYaml (include "satisfactory.game" .Values.game) -}} {{- $dev := fromYaml (include "satisfactory.dev" .Values.dev) -}} {{- $server := fromYaml (include "satisfactory.server" .Values.server) -}} apiVersion: apps/v1 kind: StatefulSet metadata: name: {{ .Release.Name }}-{{ .Chart.Name }}-sfs labels: app: {{ .Release.Name }}-{{ .Chart.Name }}-sfs spec: selector: matchLabels: app: {{ .Release.Name }}-{{ .Chart.Name }}-sfs serviceName: {{ .Release.Name }}-{{ .Chart.Name }}-service replicas: {{ include "satisfactory.replicas" (dict "scaleDown" .Values.scaleDown "replicas" (include "satisfactory.formatNumber" $server.replicas)) }} template: metadata: labels: app: {{ .Release.Name }}-{{ .Chart.Name }}-sfs spec: automountServiceAccountToken: false securityContext: {{- include "satisfactory.podSecurityContext" .Values.securityContext | nindent 8 }} containers: - name: {{ .Release.Name }}-{{ .Chart.Name }}-sfs image: "ghcr.io/wolveix/satisfactory-server:{{ .Chart.AppVersion }}" env: - name: DEBUG value: "{{ $dev.debug }}" - name: MAXPLAYERS value: "{{ include "satisfactory.formatNumber" $game.maxPlayers }}" # PUID/PGID are only used by the image's root entrypoint path; # with the default non-root security context they are ignored. - name: PGID value: "1000" - name: PUID value: "1000" - name: SKIPUPDATE value: "false" - name: STEAMBETA value: "{{ $game.experimental }}" # The image only knows the negative switch, so game.enableSeasonalEvents # is negated here (#215): true -> "false" (events run). - name: DISABLESEASONALEVENTS value: "{{ include "satisfactory.disableSeasonalEvents" $game.enableSeasonalEvents }}" - name: SERVERGAMEPORT value: "{{ include "satisfactory.formatNumber" $server.gamePort }}" - name: SERVERMESSAGINGPORT value: "{{ include "satisfactory.formatNumber" $server.messagingPort }}" {{- range $value := .Values.env }} {{- if $value.value }} - name: {{ $value.name }} value: {{ tpl $value.value $ }} {{- else if $value.valueFrom }} {{- if $value.valueFrom.secretKeyRef }} - name: {{ $value.name }} valueFrom: secretKeyRef: name: {{ tpl $value.valueFrom.secretKeyRef.name $ }} key: {{ tpl $value.valueFrom.secretKeyRef.key $ }} {{- else if $value.valueFrom.configMapKeyRef }} - name: {{ $value.name }} valueFrom: configMapKeyRef: name: {{ tpl $value.valueFrom.configMapKeyRef.name $ }} key: {{ tpl $value.valueFrom.configMapKeyRef.key $ }} {{- end }} {{- end }} {{- end }} ports: - name: "api" containerPort: {{ include "satisfactory.formatNumber" $server.gamePort }} protocol: TCP - name: "game" containerPort: {{ include "satisfactory.formatNumber" $server.gamePort }} protocol: UDP - name: "messaging" containerPort: {{ include "satisfactory.formatNumber" $server.messagingPort }} protocol: TCP livenessProbe: {{- include "satisfactory.livenessProbe" .Values.livenessProbe | nindent 12 }} readinessProbe: {{- include "satisfactory.readinessProbe" .Values.readinessProbe | nindent 12 }} startupProbe: {{- include "satisfactory.startupProbe" .Values.startupProbe | nindent 12 }} resources: {{- include "satisfactory.effectiveResources" $server.resources | nindent 12 }} volumeMounts: - name: satisfactory-volume mountPath: /config subPath: config/ - name: satisfactory-volume mountPath: /config/gamefiles subPath: gameFiles/ # Writable paths required by readOnlyRootFilesystem: the steam # user's home dot-dirs (steamcmd bootstraps itself into # ~/.local/share/Steam, keeps state under ~/.steam, and the game # saves symlink lives under ~/.config) and /tmp (crash dumps). # Everything else is written to the PVC at /config. - name: steam-home mountPath: /home/steam/.steam subPath: dot-steam - name: steam-home mountPath: /home/steam/.config subPath: dot-config - name: steam-home mountPath: /home/steam/.local subPath: dot-local - name: tmp mountPath: /tmp securityContext: {{- include "satisfactory.containerSecurityContext" .Values.securityContext | nindent 12 }} volumes: - name: satisfactory-volume persistentVolumeClaim: # Deliberate exception from the naming scheme: renaming the PVC # would detach existing data (see README, naming exceptions). claimName: {{ .Release.Name }}-{{ .Chart.Name }}-vc - name: steam-home emptyDir: {} - name: tmp emptyDir: {}