From ec92178e7a0f8d48a44412f5b39ae93b3464357d Mon Sep 17 00:00:00 2001 From: Xstar97TheNoob <9399967+xstar97@users.noreply.github.com> Date: Mon, 5 Feb 2024 16:36:11 -0500 Subject: [PATCH] fix(palworld) update ini code,gui, docs and rcon sidecar (#17951) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **Description** - Update ini code - update gui item - remove update docs and add it to main instead. - give the end user to enable/disable the rcon sidecar ⚒️ Fixes # **⚙️ Type of change** - [ ] ⚙️ Feature/App addition - [X] 🪛 Bugfix - [ ] ⚠️ Breaking change (fix or feature that would cause existing functionality to not work as expected) - [X] 🔃 Refactor of current code **🧪 How Has This Been Tested?** **📃 Notes:** **✔️ 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 - [X] ⬆️ 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. - [ ] 🖼️ 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._ --- charts/incubator/palworld/Chart.yaml | 2 +- .../palworld/docs/installation_notes.md | 9 + .../incubator/palworld/docs/update_notes.md | 9 - charts/incubator/palworld/questions.yaml | 20 ++- .../palworld/templates/_configmap.tpl | 3 +- .../incubator/palworld/templates/common.yaml | 6 + charts/incubator/palworld/values.yaml | 168 +++++++++++------- 7 files changed, 137 insertions(+), 80 deletions(-) delete mode 100644 charts/incubator/palworld/docs/update_notes.md diff --git a/charts/incubator/palworld/Chart.yaml b/charts/incubator/palworld/Chart.yaml index 80ef8be9a63..12faa58d9fa 100644 --- a/charts/incubator/palworld/Chart.yaml +++ b/charts/incubator/palworld/Chart.yaml @@ -35,4 +35,4 @@ sources: - https://ghcr.io/ich777/steamcmd - https://hub.docker.com/r/outdead/rcon type: application -version: 0.1.4 +version: 0.1.5 diff --git a/charts/incubator/palworld/docs/installation_notes.md b/charts/incubator/palworld/docs/installation_notes.md index d95a95ccffe..6ff57e7ebc5 100644 --- a/charts/incubator/palworld/docs/installation_notes.md +++ b/charts/incubator/palworld/docs/installation_notes.md @@ -14,6 +14,15 @@ You may need to restart the chart every 24 to 48hrs to keep the server from runn ::: +## Update Notes + +:::note + +To update the server; restart the chart, it will download the latest available version when present. Highly recommend to checkout [rocn docs](./rcon_notes.md) to save the game prior to restarting it. + +::: + + ## Default Values | KEY | VALUE | diff --git a/charts/incubator/palworld/docs/update_notes.md b/charts/incubator/palworld/docs/update_notes.md deleted file mode 100644 index 20eae32da7f..00000000000 --- a/charts/incubator/palworld/docs/update_notes.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: PalWorld Update Notes ---- - -:::note - -To update the server; restart the chart, it will download the latest available version when present. Highly recommend to checkout [rocn docs](./rcon_notes.md) to save the game prior to restarting it. - -::: diff --git a/charts/incubator/palworld/questions.yaml b/charts/incubator/palworld/questions.yaml index 7707c56ea87..2fa4a65d5ac 100644 --- a/charts/incubator/palworld/questions.yaml +++ b/charts/incubator/palworld/questions.yaml @@ -396,7 +396,6 @@ questions: schema: type: string default: "" - show_if: [[update_public_ip, "!=", "true"]] - variable: params label: Game Params schema: @@ -453,6 +452,25 @@ questions: type: int default: 12 min: 1 + - variable: rcon + label: RCON Sidecar Configuration + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the RCON sidecar. + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: timeout + label: Rcon TimeOut + schema: + type: string + required: true + default: 10s # Include{containerConfig} # Include{serviceRoot} diff --git a/charts/incubator/palworld/templates/_configmap.tpl b/charts/incubator/palworld/templates/_configmap.tpl index 915455e7133..9427e374052 100644 --- a/charts/incubator/palworld/templates/_configmap.tpl +++ b/charts/incubator/palworld/templates/_configmap.tpl @@ -4,6 +4,7 @@ {{- $adminPassword := .Values.palworld.game.admin_password -}} {{- $rconPort := .Values.service.rcon.ports.rcon.port }} +{{- $rcon := .Values.palworld.rcon }} palworld-rcon: enabled: true @@ -13,5 +14,5 @@ palworld-rcon: address: "{{ printf "%v-rcon:%v" $fullname $rconPort }}" password: {{ $adminPassword }} log: "rcon-palworld.log" - timeout: "10s" + timeout: "{{ $rcon.timeout }}" {{- end -}} diff --git a/charts/incubator/palworld/templates/common.yaml b/charts/incubator/palworld/templates/common.yaml index aa8a6f48691..56249f90178 100644 --- a/charts/incubator/palworld/templates/common.yaml +++ b/charts/incubator/palworld/templates/common.yaml @@ -7,5 +7,11 @@ {{- $_ := mustMergeOverwrite .Values.configmap $configmaps -}} {{- end -}} +{{/* Disable [rcon] if requested */}} +{{- if not .Values.palworld.rcon.enabled -}} + {{- $_ := set .Values.workload.rcon "enabled" false -}} +{{- end -}} + + {{/* Render the templates */}} {{- include "tc.v1.common.loader.apply" . -}} diff --git a/charts/incubator/palworld/values.yaml b/charts/incubator/palworld/values.yaml index 2a3740fe269..3d3d36bdf5f 100644 --- a/charts/incubator/palworld/values.yaml +++ b/charts/incubator/palworld/values.yaml @@ -104,6 +104,9 @@ palworld: enabled: true interval: 120 to_keep: 12 + rcon: + enabled: true + timeout: 10s workload: main: @@ -135,10 +138,17 @@ workload: fi fi - set_ini_value() { + set_ini() { local key="${1}" local value="${2}" - local quote_flag="${3:-}" + local flags="" # Initialize an empty string for flags + + # Loop through arguments starting from the third one + for arg in "$@"; do + if [ "$arg" != "$key" ] && [ "$arg" != "$value" ]; then + flags="$flags $arg" # Append each flag to the flags string + fi + done # Check if the key exists in the OptionSettings section if ! grep -q 'OptionSettings=(' "$cfgFile"; then @@ -152,10 +162,26 @@ workload: return fi - # Add quotes around the value if quote_flag is set - if [ "$quote_flag" = "-q" ]; then - value="\"$value\"" - fi + # Iterate over flags + for flag in $flags; do + case $flag in + -q) + # Add quotes around the value + value="\"$value\"" + ;; + -b) + # Handle boolean flag + if [ "$(echo "$value" | tr '[:upper:]' '[:lower:]')" = "true" ]; then + value="True" + else + value="False" + fi + ;; + *) + echo "Unknown flag: $flag. Skipping..." + ;; + esac + done # Update the value within the OptionSettings section sed -i "/OptionSettings=(/ { @@ -177,76 +203,81 @@ workload: echo "the following options are updating...." - set_ini_value "RCONEnabled" "True" -q - set_ini_value "RCONPort" "{{ .Values.service.rcon.ports.rcon.port }}" -q - set_ini_value "PublicPort" "{{ .Values.service.main.ports.main.port }}" -q + set_ini "RCONEnabled" "True" -b - set_ini_value "ServerPassword" '{{ .Values.palworld.game.password }}' -q - set_ini_value "AdminPassword" '{{ .Values.palworld.game.admin_password }}' -q + set_ini "RCONPort" "{{ .Values.service.rcon.ports.rcon.port }}" + set_ini "PublicPort" "{{ .Values.service.main.ports.main.port }}" - set_ini_value "ServerName" '{{ .Values.palworld.game.name }}' -q - set_ini_value "ServerDescription" '{{ .Values.palworld.game.description }}' -q - set_ini_value "Difficulty" "{{ .Values.palworld.game.difficulty }}" -q - set_ini_value "DeathPenalty" "{{ .Values.palworld.game.death_penalty }}" -q - set_ini_value "Region" "{{ .Values.palworld.game.region }}" -q + set_ini "ServerPassword" '{{ .Values.palworld.game.password }}' -q + set_ini "AdminPassword" '{{ .Values.palworld.game.admin_password }}' -q - set_ini_value "AutoResetGuildTimeNoOnlinePlayers" "{{ .Values.palworld.game.auto_reset_guild_time_no_online_players }}" - set_ini_value "BaseCampMaxNum" "{{ .Values.palworld.game.base_camp_max }}" - set_ini_value "BaseCampWorkerMaxNum" "{{ .Values.palworld.game.base_camp_worker_max }}" - set_ini_value "BanListURL" "{{ .Values.palworld.game.ban_list_url }}" -q - set_ini_value "BuildObjectDamageRate" "{{ .Values.palworld.game.build_object_damage_rate }}" - set_ini_value "BuildObjectDeteriorationDamageRate" "{{ .Values.palworld.game.build_object_deterioration_damage_rate }}" - set_ini_value "bCanPickupOtherGuildDeathPenaltyDrop" "{{ .Values.palworld.game.can_pickup_other_guild_death_penalty_drop }}" -q - set_ini_value "bUseAuth" "{{ .Values.palworld.game.use_auth }}" -q - set_ini_value "bEnablePlayerToPlayerDamage" "{{ .Values.palworld.game.enable_pvp_damage }}" -q - set_ini_value "bEnableFriendlyFire" "{{ .Values.palworld.game.enable_friendly_fire }}" -q - set_ini_value "bEnableInvaderEnemy" "{{ .Values.palworld.game.enable_invader_enemy }}" -q - set_ini_value "bEnableAimAssistPad" "{{ .Values.palworld.game.enable_aim_assist_pad }}" -q - set_ini_value "bEnableAimAssistKeyboard" "{{ .Values.palworld.game.enable_aim_assist_kb }}" -q - set_ini_value "bEnableNonLoginPenalty" "{{ .Values.palworld.game.enable_non_login_penalty }}" -q - set_ini_value "bEnableFastTravel" "{{ .Values.palworld.game.enable_fast_travel }}" -q - set_ini_value "bEnableDefenseOtherGuildPlayer" "{{ .Values.palworld.game.enable_defense_other_guild_player }}" -q - set_ini_value "bIsMultiplay" "{{ .Values.palworld.game.is_multiplay }}" -q - set_ini_value "bIsStartLocationSelectByMap" "{{ .Values.palworld.game.is_start_location_select_by_map }}" -q - set_ini_value "bIsPvP" "{{ .Values.palworld.game.is_pvp }}" -q - set_ini_value "bExistPlayerAfterLogout" "{{ .Values.palworld.game.exist_players_after_logout }}" -q - set_ini_value "bActiveUNKO" "{{ .Values.palworld.game.active_unko }}" -q - set_ini_value "bAutoResetGuildNoOnlinePlayers" "{{ .Values.palworld.game.guild_auto_reset_no_online_players }}" -q - set_ini_value "CollectionDropRate" "{{ .Values.palworld.game.collection_drop_rate }}" - set_ini_value "CollectionObjectHpRate" "{{ .Values.palworld.game.collection_object_hp_rate }}" - set_ini_value "CollectionObjectRespawnSpeedRate" "{{ .Values.palworld.game.collection_object_respawn_speed_rate }}" - set_ini_value "CoopPlayerMaxNum" "{{ .Values.palworld.game.max_players_coop }}" - set_ini_value "DayTimeSpeedRate" "{{ .Values.palworld.game.day_time_speed_rate }}" - set_ini_value "DropItemMaxNum" "{{ .Values.palworld.game.drop_item_max }}" - set_ini_value "DropItemMaxNum_UNKO" "{{ .Values.palworld.game.drop_item_max_unko }}" - set_ini_value "DropItemAliveMaxHours" "{{ .Values.palworld.game.drop_item_alive_max_hours }}" - set_ini_value "EnemyDropItemRate" "{{ .Values.palworld.game.enemy_drop_item_rate }}" - set_ini_value "GuildPlayerMaxNum" "{{ .Values.palworld.game.max_players_guild }}" - set_ini_value "NightTimeSpeedRate" "{{ .Values.palworld.game.night_time_speed_rate }}" - set_ini_value "PalCaptureRate" "{{ .Values.palworld.game.pal_capture_rate }}" - set_ini_value "PalEggDefaultHatchingTime" "{{ .Values.palworld.game.pal_egg_default_hatching_time }}" - set_ini_value "PalSpawnNumRate" "{{ .Values.palworld.game.pal_spawn_num_rate }}" - set_ini_value "PalDamageRateAttack" "{{ .Values.palworld.game.pal_damage_rate_attack }}" - set_ini_value "PalDamageRateDefense" "{{ .Values.palworld.game.pal_damage_rate_defense }}" - set_ini_value "PlayerDamageRateAttack" "{{ .Values.palworld.game.player_damage_rate_attack }}" - set_ini_value "PlayerDamageRateDefense" "{{ .Values.palworld.game.player_damage_rate_defense }}" - set_ini_value "PlayerStomachDecreaceRate" "{{ .Values.palworld.game.player_stomach_decreace_rate }}" - set_ini_value "PlayerStaminaDecreaceRate" "{{ .Values.palworld.game.player_stamina_decreace_rate }}" - set_ini_value "PlayerAutoHPRegeneRate" "{{ .Values.palworld.game.player_auto_hp_regene_rate }}" - set_ini_value "PlayerAutoHpRegeneRateInSleep" "{{ .Values.palworld.game.player_auto_hp_regene_rate_in_sleep }}" - set_ini_value "PalStomachDecreaceRate" "{{ .Values.palworld.game.pal_stomach_decreace_rate }}" - set_ini_value "PalStaminaDecreaceRate" "{{ .Values.palworld.game.pal_stamina_decreace_rate }}" - set_ini_value "PalAutoHPRegeneRate" "{{ .Values.palworld.game.pal_auto_hp_regene_rate }}" - set_ini_value "PalAutoHpRegeneRateInSleep" "{{ .Values.palworld.game.pal_auto_hp_regene_rate_in_sleep }}" - set_ini_value "ServerPlayerMaxNum" "{{ .Values.palworld.game.max_players }}" - set_ini_value "WorkSpeedRate" "{{ .Values.palworld.game.work_speed_rate }}" - set_ini_value "ExpRate" "{{ .Values.palworld.game.exp_rate }}" + set_ini "ServerName" '{{ .Values.palworld.game.name }}' -q + set_ini "ServerDescription" '{{ .Values.palworld.game.description }}' -q + set_ini "Difficulty" "{{ .Values.palworld.game.difficulty }}" -q + set_ini "DeathPenalty" "{{ .Values.palworld.game.death_penalty }}" -q + set_ini "Region" "{{ .Values.palworld.game.region }}" -q + + set_ini "AutoResetGuildTimeNoOnlinePlayers" "{{ .Values.palworld.game.auto_reset_guild_time_no_online_players }}" + set_ini "BaseCampMaxNum" "{{ .Values.palworld.game.base_camp_max }}" + set_ini "BaseCampWorkerMaxNum" "{{ .Values.palworld.game.base_camp_worker_max }}" + set_ini "BanListURL" "{{ .Values.palworld.game.ban_list_url }}" -q + set_ini "BuildObjectDamageRate" "{{ .Values.palworld.game.build_object_damage_rate }}" + set_ini "BuildObjectDeteriorationDamageRate" "{{ .Values.palworld.game.build_object_deterioration_damage_rate }}" + + set_ini "bCanPickupOtherGuildDeathPenaltyDrop" "{{ .Values.palworld.game.can_pickup_other_guild_death_penalty_drop }}" -b + set_ini "bUseAuth" "{{ .Values.palworld.game.use_auth }}" -b + set_ini "bEnablePlayerToPlayerDamage" "{{ .Values.palworld.game.enable_pvp_damage }}" -b + set_ini "bEnableFriendlyFire" "{{ .Values.palworld.game.enable_friendly_fire }}" -b + set_ini "bEnableInvaderEnemy" "{{ .Values.palworld.game.enable_invader_enemy }}" -b + set_ini "bEnableAimAssistPad" "{{ .Values.palworld.game.enable_aim_assist_pad }}" -b + set_ini "bEnableAimAssistKeyboard" "{{ .Values.palworld.game.enable_aim_assist_kb }}" -b + set_ini "bEnableNonLoginPenalty" "{{ .Values.palworld.game.enable_non_login_penalty }}" -b + set_ini "bEnableFastTravel" "{{ .Values.palworld.game.enable_fast_travel }}" -b + set_ini "bEnableDefenseOtherGuildPlayer" "{{ .Values.palworld.game.enable_defense_other_guild_player }}" -b + set_ini "bIsMultiplay" "{{ .Values.palworld.game.is_multiplay }}" -b + set_ini "bIsStartLocationSelectByMap" "{{ .Values.palworld.game.is_start_location_select_by_map }}" -b + set_ini "bIsPvP" "{{ .Values.palworld.game.is_pvp }}" -b + set_ini "bExistPlayerAfterLogout" "{{ .Values.palworld.game.exist_players_after_logout }}" -b + set_ini "bActiveUNKO" "{{ .Values.palworld.game.active_unko }}" -b + set_ini "bAutoResetGuildNoOnlinePlayers" "{{ .Values.palworld.game.guild_auto_reset_no_online_players }}" -b + + set_ini "CollectionDropRate" "{{ .Values.palworld.game.collection_drop_rate }}" + set_ini "CollectionObjectHpRate" "{{ .Values.palworld.game.collection_object_hp_rate }}" + set_ini "CollectionObjectRespawnSpeedRate" "{{ .Values.palworld.game.collection_object_respawn_speed_rate }}" + set_ini "CoopPlayerMaxNum" "{{ .Values.palworld.game.max_players_coop }}" + set_ini "DayTimeSpeedRate" "{{ .Values.palworld.game.day_time_speed_rate }}" + set_ini "DropItemMaxNum" "{{ .Values.palworld.game.drop_item_max }}" + set_ini "DropItemMaxNum_UNKO" "{{ .Values.palworld.game.drop_item_max_unko }}" + set_ini "DropItemAliveMaxHours" "{{ .Values.palworld.game.drop_item_alive_max_hours }}" + set_ini "EnemyDropItemRate" "{{ .Values.palworld.game.enemy_drop_item_rate }}" + set_ini "GuildPlayerMaxNum" "{{ .Values.palworld.game.max_players_guild }}" + set_ini "NightTimeSpeedRate" "{{ .Values.palworld.game.night_time_speed_rate }}" + set_ini "PalCaptureRate" "{{ .Values.palworld.game.pal_capture_rate }}" + set_ini "PalEggDefaultHatchingTime" "{{ .Values.palworld.game.pal_egg_default_hatching_time }}" + set_ini "PalSpawnNumRate" "{{ .Values.palworld.game.pal_spawn_num_rate }}" + set_ini "PalDamageRateAttack" "{{ .Values.palworld.game.pal_damage_rate_attack }}" + set_ini "PalDamageRateDefense" "{{ .Values.palworld.game.pal_damage_rate_defense }}" + set_ini "PlayerDamageRateAttack" "{{ .Values.palworld.game.player_damage_rate_attack }}" + set_ini "PlayerDamageRateDefense" "{{ .Values.palworld.game.player_damage_rate_defense }}" + set_ini "PlayerStomachDecreaceRate" "{{ .Values.palworld.game.player_stomach_decreace_rate }}" + set_ini "PlayerStaminaDecreaceRate" "{{ .Values.palworld.game.player_stamina_decreace_rate }}" + set_ini "PlayerAutoHPRegeneRate" "{{ .Values.palworld.game.player_auto_hp_regene_rate }}" + set_ini "PlayerAutoHpRegeneRateInSleep" "{{ .Values.palworld.game.player_auto_hp_regene_rate_in_sleep }}" + set_ini "PalStomachDecreaceRate" "{{ .Values.palworld.game.pal_stomach_decreace_rate }}" + set_ini "PalStaminaDecreaceRate" "{{ .Values.palworld.game.pal_stamina_decreace_rate }}" + set_ini "PalAutoHPRegeneRate" "{{ .Values.palworld.game.pal_auto_hp_regene_rate }}" + set_ini "PalAutoHpRegeneRateInSleep" "{{ .Values.palworld.game.pal_auto_hp_regene_rate_in_sleep }}" + set_ini "ServerPlayerMaxNum" "{{ .Values.palworld.game.max_players }}" + set_ini "WorkSpeedRate" "{{ .Values.palworld.game.work_speed_rate }}" + set_ini "ExpRate" "{{ .Values.palworld.game.exp_rate }}" # Check if update_public_ip is not true if [ "${update_public_ip}" != "true" ]; then - set_ini_value "PublicIP" "{{ .Values.palworld.game.public_ip }}" -q + set_ini "PublicIP" "{{ .Values.palworld.game.public_ip }}" -q fi + echo "Done!" + containers: main: probes: @@ -320,6 +351,7 @@ persistence: mountPath: /rcon.yaml subPath: rcon.yaml readOnly: true + portal: open: enabled: false