diff --git a/charts/incubator/sonsoftheforest/.helmignore b/charts/incubator/sonsoftheforest/.helmignore new file mode 100644 index 00000000000..77ca5567b26 --- /dev/null +++ b/charts/incubator/sonsoftheforest/.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/sonsoftheforest/CHANGELOG.md b/charts/incubator/sonsoftheforest/CHANGELOG.md new file mode 100644 index 00000000000..825c32f0d03 --- /dev/null +++ b/charts/incubator/sonsoftheforest/CHANGELOG.md @@ -0,0 +1 @@ +# Changelog diff --git a/charts/incubator/sonsoftheforest/Chart.yaml b/charts/incubator/sonsoftheforest/Chart.yaml new file mode 100644 index 00000000000..5075d1f3b51 --- /dev/null +++ b/charts/incubator/sonsoftheforest/Chart.yaml @@ -0,0 +1,28 @@ +apiVersion: v2 +appVersion: "latest" +dependencies: + - name: common + repository: https://library-charts.truecharts.org + version: 14.0.1 +deprecated: false +description: A custom SteamCMD chart that runs Sons Of The Forest Server. +home: https://truecharts.org/charts/incubator/sonsoftheforest +icon: https://truecharts.org/img/hotlink-ok/chart-icons/sonsoftheforest.png +keywords: + - sonsoftheforest + - GameServers +kubeVersion: ">=1.16.0-0" +maintainers: + - email: info@truecharts.org + name: TrueCharts + url: https://truecharts.org +name: sonsoftheforest +sources: + - https://github.com/truecharts/charts/tree/master/charts/incubator/sonsoftheforest + - https://github.com/ich777/docker-steamcmd-server/tree/sonsoftheforest +type: application +version: 0.0.1 +annotations: + truecharts.org/catagories: | + - GameServers + truecharts.org/SCALE-support: "true" diff --git a/charts/incubator/sonsoftheforest/README.md b/charts/incubator/sonsoftheforest/README.md new file mode 100644 index 00000000000..7e59600739c --- /dev/null +++ b/charts/incubator/sonsoftheforest/README.md @@ -0,0 +1 @@ +# README diff --git a/charts/incubator/sonsoftheforest/icon.png b/charts/incubator/sonsoftheforest/icon.png new file mode 100644 index 00000000000..c415a70ac45 Binary files /dev/null and b/charts/incubator/sonsoftheforest/icon.png differ diff --git a/charts/incubator/sonsoftheforest/questions.yaml b/charts/incubator/sonsoftheforest/questions.yaml new file mode 100644 index 00000000000..f323f3d6235 --- /dev/null +++ b/charts/incubator/sonsoftheforest/questions.yaml @@ -0,0 +1,538 @@ +# Include{groups} +portals: {} +questions: +# Include{global} +# Include{workload} +# Include{workloadDeployment} + +# Include{replicas1} +# Include{podSpec} +# Include{containerMain} + +# Include{containerBasic} +# Include{containerAdvanced} + + - variable: sonsoftheforest + group: App Configuration + label: Sons of the Forest + 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: "2465200" + - variable: user + label: Steam User + description: Leave blank for anonymous login. + schema: + type: string + default: "" + - variable: password + label: Steam Password + description: Leave blank for anonymous login. + schema: + type: string + default: "" + - variable: validate + label: Validate + description: Validates the game data. + schema: + type: boolean + default: true + - variable: params + label: Game Params + schema: + type: list + default: [] + required: true + items: + - variable: param + label: Param + schema: + type: string + required: true + default: "" + - variable: server + label: Game Server Configuration + schema: + additional_attrs: true + type: dict + attrs: + - variable: ServerName + label: Server Name + description: Name of the server visible in the server list, and in the Steam contacts. + schema: + type: string + required: true + default: "Sons Of The Forest Docker Server" + - variable: MaxPlayers + label: Max Players + description: The maximum number of players allowed simultaneously on the server. + schema: + type: int + required: true + default: 8 + min: 1 + - variable: Password + label: Password + description: Adds a password to make your server “private”. Upon connection, this password will be requested before the client can proceed. + schema: + type: string + private: true + default: "" + - variable: LanOnly + label: Lan Only + description: Allows or restricts the server visibility to LAN only. + schema: + type: boolean + default: false + - variable: SaveSlot + label: Save Slot + description: When creating a new save, this number will be the id of the save. + schema: + type: int + required: true + default: 1 + min: 1 + - variable: SaveMode + label: Save Mode + description: Game save initialization mode. + schema: + type: string + required: true + default: "Continue" + enum: + - value: Continue + description: Continue + - value: New + description: New + - variable: GameMode + label: Game Mode + description: Sets the difficulty game mode when creating a new save. + schema: + type: string + required: true + default: "normal" + enum: + - value: peaceful + description: Peaceful + - value: normal + description: Normal + - value: hard + description: Hard + - value: hardsurvival + description: Hard Survival + - value: custom + description: Custom + - variable: SaveInterval + label: Save Interval + description: How often the game server automatically saves the game to SaveSlot, in seconds. + schema: + type: int + required: true + default: 600 + - variable: IdleDayCycleSpeed + label: Idle Day Cycle Speed + description: A multiplier to how quickly the time passes compared to normal gameplay when the server is considered idle (no player connected). + schema: + type: string + required: true + default: "0.0" + - variable: IdleTargetFramerate + label: Idle Target Framerate + description: Target framerate of the server when it’s considered idle (no player connected). + schema: + type: int + required: true + default: 5 + - variable: ActiveTargetFramerate + label: Active Target Framerate + description: Target framerate of the server when it’s NOT considered idle (one or more player connected). + schema: + type: int + required: true + default: 60 + - variable: LogFilesEnabled + label: Log Files Enabled + description: Defines if the logs will be written to files. + schema: + type: boolean + default: false + - variable: TimestampLogFilenames + label: Timestamp Log Filenames + description: Enabled log files timestamping. + schema: + type: boolean + default: true + - variable: TimestampLogEntries + label: Timestamp Log Entries + description: Enables each log entry written to file to be timestamped. + schema: + type: boolean + default: true + - variable: SkipNetworkAccessibilityTest + label: Skip Network Accessibility Test + description: Opt-out of network accessibility self tests. + schema: + type: boolean + default: false + - variable: GameSettings + label: Game Settings + schema: + additional_attrs: true + type: dict + attrs: + - variable: Gameplay.TreeRegrowth + label: Tree Regrowth + description: Enable automatic tree regrowth, triggered when sleeping. + schema: + type: boolean + default: true + - variable: Structure.Damage + label: Structure Damage + description: Allow buildings to be damaged. + schema: + type: boolean + default: true + - variable: CustomGameModeSettings + label: Custom GameMode Settings + description: These parameters are ignored if the Game Mode is not “custom”. + schema: + additional_attrs: true + type: dict + attrs: + - variable: GameSetting.Multiplayer.Cheats + label: Cheats + description: Allows cheats on the server. + schema: + type: boolean + default: false + - variable: GameSetting.Vail.EnemySpawn + label: Enemy Spawn + description: Enable enemies spawning. + schema: + type: boolean + default: true + - variable: GameSetting.Vail.EnemyHealth + label: Enemy Health + description: Adjust enemy starting health. + schema: + type: string + required: true + default: "normal" + enum: + - value: low + description: Low + - value: normal + description: Normal + - value: high + description: High + - variable: GameSetting.Vail.EnemyDamage + label: Enemy Damage + description: Adjust damage enemies can do. + schema: + type: string + required: true + default: "normal" + enum: + - value: low + description: Low + - value: normal + description: Normal + - value: high + description: High + - variable: GameSetting.Vail.EnemyArmour + label: Enemy Armour + description: Adjust enemies armor strength. + schema: + type: string + required: true + default: "normal" + enum: + - value: low + description: Low + - value: normal + description: Normal + - value: high + description: High + - variable: GameSetting.Vail.EnemyAggression + label: Enemy Aggression + description: Adjust enemy aggression level. + schema: + type: string + required: true + default: "normal" + enum: + - value: low + description: Low + - value: normal + description: Normal + - value: high + description: High + - variable: GameSetting.Vail.AnimalSpawnRate + label: Animal Spawn Rate + description: Adjust animal spawn rate. + schema: + type: string + required: true + default: "normal" + enum: + - value: low + description: Low + - value: normal + description: Normal + - value: high + description: High + - variable: GameSetting.Environment.StartingSeason + label: Starting Season + description: Set environmental starting season. + schema: + type: string + required: true + default: "summer" + enum: + - value: spring + description: Spring + - value: summer + description: Summer + - value: autumn + description: Autumn + - value: winter + description: Winter + - variable: GameSetting.Environment.SeasonLength + label: Season Length + description: Adjust season length. + schema: + type: string + required: true + default: "default" + enum: + - value: short + description: Short + - value: default + description: Default + - value: long + description: Long + - value: realistic + description: Realistic + - variable: GameSetting.Environment.DayLength + label: Day Length + description: Adjust day length. + schema: + type: string + required: true + default: "default" + enum: + - value: short + description: Short + - value: default + description: Default + - value: long + description: Long + - value: realistic + description: Realistic + - variable: GameSetting.Environment.PrecipitationFrequency + label: Precipitation Frequency + description: Adjust the frequency of rain and snow. + schema: + type: string + required: true + default: "default" + enum: + - value: low + description: Low + - value: default + description: Default + - value: high + description: High + - variable: Structure.Damage + label: Structure Damage + description: Allow buildings to be damaged. + schema: + type: boolean + default: true + - variable: GameSetting.Survival.ConsumableEffects + label: Consumable Effects + description: Enable damage taken when low hydration and low fullness. + schema: + type: string + required: true + default: "hard" + enum: + - value: normal + description: normal + - value: hard + description: Hard + - variable: GameSetting.Survival.PlayerStatsDamage + label: PlayerStat Damage + description: Enable damage from each bad or rotten food and drink. + schema: + type: string + required: true + default: "off" + enum: + - value: "off" + description: "Off" + - value: normal + description: normal + - value: hard + description: Hard + - variable: GameSetting.Survival.ColdPenalties + label: Cold Penalties + description: Adjusts the severity that cold will affect health and stamina regeneration. + schema: + type: string + required: true + default: "off" + enum: + - value: "off" + description: "Off" + - value: normal + description: normal + - value: hard + description: Hard + - variable: GameSetting.Survival.ReducedFoodInContainers + label: Reduced Food In Containers + description: Reduces the amount of food found in containers. + schema: + type: boolean + default: false + - variable: GameSetting.Survival.SingleUseContainers + label: Single Use Containers + description: Containers can only be opened once. + schema: + type: boolean + default: false + +# Include{containerConfig} +# Include{podOptions} +# Include{serviceRoot} + - variable: main + label: Main Service + description: The Primary service on which the healthcheck runs, often the webUI + schema: + additional_attrs: true + type: dict + attrs: +# 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: 8766 + required: true + - variable: query + label: Query service + description: Query Service Port Configuration + schema: + additional_attrs: true + type: dict + attrs: +# Include{serviceSelectorLoadBalancer} +# Include{serviceSelectorExtras} + - variable: query + label: Query 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: 27016 + required: true + - variable: sync + label: Sync service + description: Sync Service Port Configuration + schema: + additional_attrs: true + type: dict + attrs: +# Include{serviceSelectorLoadBalancer} +# Include{serviceSelectorExtras} + - variable: sync + label: Sync 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: 9700 + 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{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/sonsoftheforest/templates/NOTES.txt b/charts/incubator/sonsoftheforest/templates/NOTES.txt new file mode 100644 index 00000000000..efcb74cb772 --- /dev/null +++ b/charts/incubator/sonsoftheforest/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/charts/incubator/sonsoftheforest/templates/_configmap.tpl b/charts/incubator/sonsoftheforest/templates/_configmap.tpl new file mode 100644 index 00000000000..e95bd8a34e4 --- /dev/null +++ b/charts/incubator/sonsoftheforest/templates/_configmap.tpl @@ -0,0 +1,13 @@ +{{/* Define the configmap */}} +{{- define "sonsoftheforest.configmaps" -}} +{{- $fullname := (include "tc.v1.common.lib.chart.names.fullname" $) -}} + +{{- $server := .Values.sonsoftheforest.server -}} + +sonsoftheforest-dscfg: + enabled: true + data: + dedicatedserver.cfg: | + {{ $server | toJson }} + +{{- end -}} diff --git a/charts/incubator/sonsoftheforest/templates/common.yaml b/charts/incubator/sonsoftheforest/templates/common.yaml new file mode 100644 index 00000000000..f2fcfabc9de --- /dev/null +++ b/charts/incubator/sonsoftheforest/templates/common.yaml @@ -0,0 +1,11 @@ +{{/* Make sure all variables are set properly */}} +{{- include "tc.v1.common.loader.init" . -}} + +{{/* Render configmaps for all pods */}} +{{- $configmaps := include "sonsoftheforest.configmaps" . | fromYaml -}} +{{- if $configmaps -}} + {{- $_ := mustMergeOverwrite .Values.configmap $configmaps -}} +{{- end -}} + +{{/* Render the templates */}} +{{- include "tc.v1.common.loader.apply" . -}} diff --git a/charts/incubator/sonsoftheforest/values.yaml b/charts/incubator/sonsoftheforest/values.yaml new file mode 100644 index 00000000000..ed9cbc54636 --- /dev/null +++ b/charts/incubator/sonsoftheforest/values.yaml @@ -0,0 +1,145 @@ +image: + repository: tccr.io/truecharts/sonsoftheforest + pullPolicy: IfNotPresent + tag: latest@sha256:e435b582929c81473862460a9305751b0cf79413ecc8599332b0104e0da603ab + +securityContext: + container: + runAsNonRoot: false + readOnlyRootFilesystem: false + runAsUser: 0 + runAsGroup: 0 + +service: + main: + ports: + main: + protocol: udp + port: 8766 + query: + enabled: true + ports: + query: + enabled: true + protocol: udp + port: 27016 + sync: + enabled: true + ports: + sync: + enabled: true + protocol: udp + port: 9700 + +sonsoftheforest: + game: + id: "2465200" + user: "" + password: "" + validate: false + params: [] + server: + IpAddress: "0.0.0.0" + GamePort: "{{ .Values.service.main.ports.main.port }}" + QueryPort: "{{ .Values.service.query.ports.query.port }}" + BlobSyncPort: "{{ .Values.service.sync.ports.sync.port }}" + ServerName: "Sons Of The Forest Docker Server" + MaxPlayers: 8 + Password: "" + LanOnly: false + # integer, equal to or greater than 1 + SaveSlot: 1 + # new, continue + SaveMode: "continue" + # peaceful, normal, hard, hardsurvival, custom + GameMode: "normal" + SaveInterval: 600 + IdleDayCycleSpeed: "0.0" + IdleTargetFramerate: 5 + ActiveTargetFramerate: 60 + LogFilesEnabled: false + TimestampLogFilenames: true + TimestampLogEntries: true + SkipNetworkAccessibilityTest: false + GameSettings: + Gameplay.TreeRegrowth: true + Structure.Damage: true + CustomGameModeSettings: + # Multiplayer + GameSetting.Multiplayer.Cheats: false + # Vail + GameSetting.Vail.EnemySpawn: true + # low, normal, high + GameSetting.Vail.EnemyHealth: "normal" + # low, normal, high + GameSetting.Vail.EnemyDamage: "normal" + # low, normal, high + GameSetting.Vail.EnemyArmour: "normal" + # low, normal, high + GameSetting.Vail.EnemyAggression: "normal" + # low, normal, high + GameSetting.Vail.AnimalSpawnRate: "normal" + # Environment + # spring, summer, autumn, winter + GameSetting.Environment.StartingSeason: "Summer" + # short, default, long, realistic + GameSetting.Environment.SeasonLength: "default" + # short, default, long, realistic + GameSetting.Environment.DayLength: "default" + # low, default, high + GameSetting.Environment.PrecipitationFrequency: "default" + # not a dupe key. + Structure.Damage: true + # Survival + # normal, hard + GameSetting.Survival.ConsumableEffects: "normal" + # off, normal, hard + GameSetting.Survival.PlayerStatsDamage: "off" + # off, normal, hard + GameSetting.Survival.ColdPenalties: "off" + GameSetting.Survival.ReducedFoodInContainers: false + GameSetting.Survival.SingleUssonsoftheforestntainers: false + +workload: + main: + podSpec: + containers: + main: + probes: + liveness: + enabled: false + readiness: + enabled: false + startup: + enabled: false + env: + GAME_PORT: "{{ .Values.service.main.ports.main.port }}" + STEAMCMD_DIR: "{{ .Values.persistence.steamcmd.mountPath }}" + SERVER_DIR: "{{ .Values.persistence.serverfiles.mountPath }}" + GAME_ID: "{{ .Values.sonsoftheforest.game.id }}" + USERNAME: "{{ .Values.sonsoftheforest.game.user }}" + PASSWRD: "{{ .Values.sonsoftheforest.game.password }}" + GAME_PARAMS: '{{ join " " .Values.sonsoftheforest.game.params }}' + VALIDATE: "{{ .Values.sonsoftheforest.game.validate }}" + +persistence: + steamcmd: + enabled: true + mountPath: /serverdata/steamcmd + serverfiles: + enabled: true + mountPath: /serverdata/serverfiles + dedicatedserver-dscfg: + enabled: true + type: configmap + objectName: sonsoftheforest-dscfg + targetSelector: + main: + main: + mountPath: /serverdata/serverfiles/userdata/dedicatedserver.cfg + subPath: dedicatedserver.cfg + readOnly: true + +portal: + open: + enabled: false