feat(sonsoftheforest) add sonsoftheforest (#12196)

**Description**
A custom SteamCMD chart that runs Sons Of The Forest Server.
⚒️ Fixes  # <!--(issue)-->

**⚙️ Type of change**

- [X] ⚙️ Feature/App addition
- [ ] 🪛 Bugfix
- [ ] ⚠️ Breaking change (fix or feature that would cause existing
functionality to not work as expected)
- [ ] 🔃 Refactor of current code

**🧪 How Has This Been Tested?**
<!--
Please describe the tests that you ran to verify your changes. Provide
instructions so we can reproduce. Please also list any relevant details
for your test configuration
-->

**📃 Notes:**
<!-- Please enter any other relevant information here -->

**✔️ Checklist:**

- [X] ⚖️ My code follows the style guidelines of this project
- [X] 👀 I have performed a self-review of my own code
- [ ] #️⃣ I have commented my code, particularly in hard-to-understand
areas
- [ ] 📄 I have made corresponding changes to the documentation
- [ ] ⚠️ My changes generate no new warnings
- [ ] 🧪 I have added tests to this description that prove my fix is
effective or that my feature works
- [ ] ⬆️ I increased versions for any altered app according to semantic
versioning

** App addition**

If this PR is an app addition please make sure you have done the
following.

- [X] 🪞 I have opened a PR on
[truecharts/containers](https://github.com/truecharts/containers) adding
the container to TrueCharts mirror repo.
- [X] 🖼️ I have added an icon in the Chart's root directory called
`icon.png`

---

_Please don't blindly check all the boxes. Read them and only check
those that apply.
Those checkboxes are there for the reviewer to see what is this all
about and
the status of this PR with a quick glance._
This commit is contained in:
Xstar97TheNoob 2023-09-16 04:45:12 -04:00 committed by GitHub
parent c7032a9ba8
commit c44257e090
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 768 additions and 0 deletions

View File

@ -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

View File

@ -0,0 +1 @@
# Changelog

View File

@ -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"

View File

@ -0,0 +1 @@
# README

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

View File

@ -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 its 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 its 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}

View File

@ -0,0 +1 @@
{{- include "tc.v1.common.lib.chart.notes" $ -}}

View File

@ -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 -}}

View File

@ -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" . -}}

View File

@ -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