diff --git a/charts/incubator/palworld/.helmignore b/charts/incubator/palworld/.helmignore new file mode 100644 index 00000000000..77ca5567b26 --- /dev/null +++ b/charts/incubator/palworld/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/charts/incubator/palworld/CHANGELOG.md b/charts/incubator/palworld/CHANGELOG.md new file mode 100644 index 00000000000..825c32f0d03 --- /dev/null +++ b/charts/incubator/palworld/CHANGELOG.md @@ -0,0 +1 @@ +# Changelog diff --git a/charts/incubator/palworld/Chart.yaml b/charts/incubator/palworld/Chart.yaml new file mode 100644 index 00000000000..135da2014d6 --- /dev/null +++ b/charts/incubator/palworld/Chart.yaml @@ -0,0 +1,37 @@ +annotations: + max_scale_version: 23.10.2 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + truecharts.org/category: GameServers + truecharts.org/max_helm_version: "3.14" + truecharts.org/min_helm_version: "3.12" + truecharts.org/train: incubator +apiVersion: v2 +appVersion: palworld +dependencies: + - name: common + version: 17.2.26 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] +deprecated: false +description: A custom SteamCMD chart that runs Palworld. +home: https://truecharts.org/charts/incubator/palworld +icon: https://truecharts.org/img/hotlink-ok/chart-icons/palworld.png +keywords: + - palworld + - GameServers +kubeVersion: '>=1.24.0-0' +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: palworld +sources: + - https://github.com/ich777/docker-steamcmd-server/tree/palworld + - https://github.com/truecharts/charts/tree/master/charts/incubator/palworld + - https://ghcr.io/ich777/steamcmd +type: application +version: 0.0.1 diff --git a/charts/incubator/palworld/README.md b/charts/incubator/palworld/README.md new file mode 100644 index 00000000000..7e59600739c --- /dev/null +++ b/charts/incubator/palworld/README.md @@ -0,0 +1 @@ +# README diff --git a/charts/incubator/palworld/icon.jpg b/charts/incubator/palworld/icon.jpg new file mode 100644 index 00000000000..79d563a60cd Binary files /dev/null and b/charts/incubator/palworld/icon.jpg differ diff --git a/charts/incubator/palworld/questions.yaml b/charts/incubator/palworld/questions.yaml new file mode 100644 index 00000000000..e5fab2b3b05 --- /dev/null +++ b/charts/incubator/palworld/questions.yaml @@ -0,0 +1,209 @@ +# Include{groups} +portals: {} +questions: +# Include{global} +# Include{workload} +# Include{workloadDeployment} +# Include{replicas1} +# Include{podSpec} +# Include{containerMain} + +# Include{containerBasic} +# Include{containerAdvanced} + + - variable: palworld + group: App Configuration + label: Palworld Configuration + schema: + additional_attrs: true + type: dict + attrs: + - variable: game + label: Game Configuration + schema: + additional_attrs: true + type: dict + attrs: + - variable: id + label: Game Id + description: The ID of the container to download at start up. + schema: + type: string + required: true + default: "2394010" + - variable: steam + label: Steam Configuration + schema: + additional_attrs: true + type: dict + attrs: + - variable: username + label: Username + description: Optionally set a steam username otherwise (disable Steam Guard). + schema: + type: string + default: "" + - variable: password + label: Password + description: Optionally set a steam password (disable Steam Guard). + schema: + type: string + private: true + default: "" + - variable: admin + label: Admin Configuration + schema: + additional_attrs: true + type: dict + attrs: + - variable: password + label: Server Admin Password + description: Optionally set a password for the admin (this field accepts no spaces) + schema: + type: string + private: true + default: "" + - variable: params + label: Game Params + schema: + type: list + default: + - EpicApp=PalServer + required: true + items: + - variable: param + label: Param + schema: + type: string + required: true + default: "" + - variable: params_extra + label: Game Params Extra + schema: + type: list + default: + - -No-useperfthreads + - -NoAsyncLoadingThread + - -UseMultithreadForDS + required: true + items: + - variable: extra_param + label: Extra Param + schema: + type: string + required: true + default: "" + - variable: update_public_ip + label: Update Public IP + description: Will check if the Public IP is still valid (the container will try to grab your public IP on the first server start since the public IP is necessary to run a community server). + schema: + type: boolean + default: false + - variable: validate + label: Validate + description: Validates the game data. + schema: + type: boolean + default: false + +# Include{containerConfig} +# Include{podOptions} +# Include{serviceRoot} +# Include{serviceMain} +# Include{serviceSelectorLoadBalancer} +# Include{serviceSelectorExtras} + - variable: main + label: "Main Service Port Configuration" + schema: + additional_attrs: true + type: dict + attrs: + - variable: port + label: "Port" + description: "This port exposes the container port on the service" + schema: + type: int + default: 8211 + required: true + - variable: rcon + label: RCON Service + description: The RCON service. + schema: + additional_attrs: true + type: dict + attrs: +# Include{serviceSelectorLoadBalancer} +# Include{serviceSelectorExtras} + - variable: rcon + label: RCON Service Port Configuration + schema: + additional_attrs: true + type: dict + attrs: + - variable: port + label: Port + description: This port exposes the container port on the service + schema: + type: int + default: 25575 + required: true +# Include{serviceExpertRoot} +# Include{serviceExpert} +# Include{serviceList} +# Include{persistenceRoot} + - variable: steamcmd + label: "App SteamCMD Storage" + description: "Stores the Application SteamCMD." + schema: + additional_attrs: true + type: dict + attrs: +# Include{persistenceBasic} + - variable: serverfiles + label: "App Server Files Storage" + description: "Stores the Application Server Files." + schema: + additional_attrs: true + type: dict + attrs: +# Include{persistenceBasic} +# Include{persistenceList} +# Include{ingressRoot} + - variable: main + label: "Main Ingress" + schema: + additional_attrs: true + type: dict + attrs: +# Include{ingressDefault} +# Include{ingressAdvanced} +# Include{ingressList} +# Include{securityContextRoot} + - variable: runAsUser + label: "runAsUser" + description: "The UserID of the user running the application" + schema: + type: int + default: 0 + - variable: runAsGroup + label: "runAsGroup" + description: "The groupID of the user running the application" + schema: + type: int + default: 0 +# Include{securityContextContainer} +# Include{securityContextAdvanced} +# Include{securityContextPod} + - variable: fsGroup + label: "fsGroup" + description: "The group that should own ALL storage." + schema: + type: int + default: 568 +# Include{resources} +# Include{advanced} +# Include{addons} +# Include{codeserver} +# Include{netshoot} +# Include{vpn} +# Include{documentation} diff --git a/charts/incubator/palworld/templates/NOTES.txt b/charts/incubator/palworld/templates/NOTES.txt new file mode 100644 index 00000000000..efcb74cb772 --- /dev/null +++ b/charts/incubator/palworld/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/charts/incubator/palworld/templates/common.yaml b/charts/incubator/palworld/templates/common.yaml new file mode 100644 index 00000000000..b51394e00a4 --- /dev/null +++ b/charts/incubator/palworld/templates/common.yaml @@ -0,0 +1 @@ +{{ include "tc.v1.common.loader.all" . }} diff --git a/charts/incubator/palworld/values.yaml b/charts/incubator/palworld/values.yaml new file mode 100644 index 00000000000..338bce430b8 --- /dev/null +++ b/charts/incubator/palworld/values.yaml @@ -0,0 +1,113 @@ +image: + repository: ghcr.io/ich777/steamcmd + pullPolicy: IfNotPresent + tag: palworld@sha256:c7ed87dfb13890f340d663ca0a97acb6a8b83a40ab81a9c94c8675cee03af325 + +securityContext: + container: + readOnlyRootFilesystem: false + runAsUser: 0 + runAsGroup: 0 + +service: + main: + ports: + main: + protocol: udp + port: 8211 + rcon: + enabled: true + ports: + rcon: + enabled: true + protocol: tcp + port: 25575 + +palworld: + game: + id: "2394010" + steam: + username: "" + password: "" + admin: + password: adminDocker + params: + - EpicApp=PalServer + params_extra: + - -No-useperfthreads + - -NoAsyncLoadingThread + - -UseMultithreadForDS + update_public_ip: false + validate: false + +workload: + main: + podSpec: + initContainers: + update-config-ini: + enabled: true + type: init + imageSelector: "image" + command: + - /bin/sh + - -c + args: + - | + config=/serverdata/serverfiles/Pal/Saved/Config/LinuxServer + cfgFile=${config}/PalWorldSettings.ini + mkdir -p ${config} + if [ ! -f ${cfgFile} ]; then + echo "Config file not found, fetching..." + # Fetch the config file if it doesn't exist, just like the container does + wget -qO ${cfgFile} https://github.com/ich777/docker-steamcmd-server/raw/palworld/config/PalWorldSettings.ini + fi + echo "Setting RCON status..." + sed -i 's/\(RCONEnabled=\)[^,]*/\1True/g' ${cfgFile} + echo "Set to [$(grep -Po 'RCONEnabled=[^,]*' ${cfgFile})]" + echo "Setting RCON Port..." + sed -i 's/\(RCONPort=\)[^,]*/\1{{ .Values.service.rcon.ports.rcon.port }}/g' ${cfgFile} + echo "Set to [$(grep -Po 'RCONPort=[^,]*' ${cfgFile})]" + echo "Setting Game Port..." + sed -i 's/\(PublicPort=\)[^,]*/\1{{ .Values.service.main.ports.main.port }}/g' ${cfgFile} + echo "Set to [$(grep -Po 'PublicPort=[^,]*' ${cfgFile})]" + echo "Done!" + containers: + main: + probes: + liveness: + type: tcp + port: "{{ .Values.service.rcon.ports.rcon.port }}" + readiness: + type: tcp + port: "{{ .Values.service.rcon.ports.rcon.port }}" + startup: + type: tcp + port: "{{ .Values.service.rcon.ports.rcon.port }}" + env: + STEAMCMD_DIR: "{{ .Values.persistence.steamcmd.mountPath }}" + SERVER_DIR: "{{ .Values.persistence.serverfiles.targetSelector.main.main.mountPath }}" + GAME_ID: "{{ .Values.palworld.game.id }}" + SRV_ADMIN_PWD: "{{ .Values.palworld.admin.password }}" + GAME_PARAMS: '{{ join " " .Values.palworld.params }}' + GAME_PARAMS_EXTRA: '{{ join " " .Values.palworld.params_extra }}' + UPDATE_PUBLIC_IP: "{{ .Values.palworld.update_public_ip }}" + VALIDATE: "{{ .Values.palworld.validate }}" + USERNAME: "{{ .Values.palworld.steam.username }}" + PASSWRD: "{{ .Values.palworld.steam.password }}" + +persistence: + steamcmd: + enabled: true + mountPath: /serverdata/steamcmd + serverfiles: + enabled: true + targetSelector: + main: + main: + mountPath: /serverdata/serverfiles + update-config-ini: + mountPath: /serverdata/serverfiles + +portal: + open: + enabled: false