From 42fadbf28ec8cb78f83cfc836fff8788d597c433 Mon Sep 17 00:00:00 2001 From: sonicaj Date: Wed, 3 May 2023 11:56:13 +0000 Subject: [PATCH] Update catalog information --- catalog.json | 28 +- community/minecraft/1.0.0/Chart.lock | 6 + community/minecraft/1.0.0/Chart.yaml | 25 + community/minecraft/1.0.0/README.md | 14 + community/minecraft/1.0.0/app-readme.md | 14 + .../minecraft/1.0.0/charts/common-1.0.6.tgz | Bin 0 -> 54954 bytes .../1.0.0/ci/java11-j9-vanilla-values.yaml | 13 + .../1.0.0/ci/java11-jdk-vanilla-values.yaml | 13 + .../1.0.0/ci/java11-vanilla-values.yaml | 13 + .../ci/java17-alpine-vanilla-values.yaml | 12 + .../1.0.0/ci/java17-gce-vanilla-values.yaml | 12 + .../1.0.0/ci/java17-j9-vanilla-values.yaml | 12 + .../1.0.0/ci/java17-jdk-vanilla-values.yaml | 12 + .../1.0.0/ci/java17-vanilla-values.yaml | 12 + .../1.0.0/ci/java19-vanilla-values.yaml | 12 + .../1.0.0/ci/java8-gce-vanilla-values.yaml | 13 + .../1.0.0/ci/java8-j9-vanilla-values.yaml | 13 + .../1.0.0/ci/java8-jdk-vanilla-values.yaml | 13 + .../1.0.0/ci/java8-vanilla-values.yaml | 13 + community/minecraft/1.0.0/ix_values.yaml | 105 +++ community/minecraft/1.0.0/metadata.yaml | 18 + community/minecraft/1.0.0/questions.yaml | 638 ++++++++++++++++++ community/minecraft/1.0.0/templates/NOTES.txt | 1 + .../1.0.0/templates/_configuration.tpl | 83 +++ .../minecraft/1.0.0/templates/_minecraft.tpl | 98 +++ .../minecraft/1.0.0/templates/common.yaml | 7 + community/minecraft/item.yaml | 3 + 27 files changed, 1202 insertions(+), 1 deletion(-) create mode 100644 community/minecraft/1.0.0/Chart.lock create mode 100644 community/minecraft/1.0.0/Chart.yaml create mode 100644 community/minecraft/1.0.0/README.md create mode 100644 community/minecraft/1.0.0/app-readme.md create mode 100644 community/minecraft/1.0.0/charts/common-1.0.6.tgz create mode 100644 community/minecraft/1.0.0/ci/java11-j9-vanilla-values.yaml create mode 100644 community/minecraft/1.0.0/ci/java11-jdk-vanilla-values.yaml create mode 100644 community/minecraft/1.0.0/ci/java11-vanilla-values.yaml create mode 100644 community/minecraft/1.0.0/ci/java17-alpine-vanilla-values.yaml create mode 100644 community/minecraft/1.0.0/ci/java17-gce-vanilla-values.yaml create mode 100644 community/minecraft/1.0.0/ci/java17-j9-vanilla-values.yaml create mode 100644 community/minecraft/1.0.0/ci/java17-jdk-vanilla-values.yaml create mode 100644 community/minecraft/1.0.0/ci/java17-vanilla-values.yaml create mode 100644 community/minecraft/1.0.0/ci/java19-vanilla-values.yaml create mode 100644 community/minecraft/1.0.0/ci/java8-gce-vanilla-values.yaml create mode 100644 community/minecraft/1.0.0/ci/java8-j9-vanilla-values.yaml create mode 100644 community/minecraft/1.0.0/ci/java8-jdk-vanilla-values.yaml create mode 100644 community/minecraft/1.0.0/ci/java8-vanilla-values.yaml create mode 100644 community/minecraft/1.0.0/ix_values.yaml create mode 100644 community/minecraft/1.0.0/metadata.yaml create mode 100644 community/minecraft/1.0.0/questions.yaml create mode 100644 community/minecraft/1.0.0/templates/NOTES.txt create mode 100644 community/minecraft/1.0.0/templates/_configuration.tpl create mode 100644 community/minecraft/1.0.0/templates/_minecraft.tpl create mode 100644 community/minecraft/1.0.0/templates/common.yaml create mode 100644 community/minecraft/item.yaml diff --git a/catalog.json b/catalog.json index e0cfdc83c7..bd7cd7692a 100644 --- a/catalog.json +++ b/catalog.json @@ -330,7 +330,7 @@ "latest_version": "1.0.10", "latest_app_version": "v1.68.2", "latest_human_version": "v1.68.2_1.0.10", - "last_update": "2023-05-01 16:31:27", + "last_update": "2023-05-03 11:34:48", "name": "storj", "recommended": false, "title": "Storj", @@ -590,6 +590,32 @@ "tags": [], "icon_url": "https://gitea.com/assets/img/logo.svg" }, + "minecraft": { + "app_readme": "

Minecraft

\n

Minecraft is a sandbox game

\n
\n

Application requires to run as root.

\n
\n

Depending on the Type of server selected, you might need to add additional\ncustom environment variables to the application.

\n

More info can be found here\nSelect the type on the sidebar.

\n

Note that some values are only applicable during the world generation.\nMore info can be found here

", + "categories": [ + "minecraft" + ], + "description": "Minecraft is a sandbox game", + "healthy": true, + "healthy_error": null, + "location": "/__w/charts/charts/community/minecraft", + "latest_version": "1.0.0", + "latest_app_version": "2023.3.0", + "latest_human_version": "2023.3.0_1.0.0", + "last_update": null, + "name": "minecraft", + "recommended": false, + "title": "Minecraft", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "tags": [], + "icon_url": "https://www.minecraft.net/content/dam/games/minecraft/logos/logo-minecraft.svg" + }, "tdarr": { "app_readme": "

Tdarr

\n

Tdarr is a Distributed Transcoding System

\n", "categories": [ diff --git a/community/minecraft/1.0.0/Chart.lock b/community/minecraft/1.0.0/Chart.lock new file mode 100644 index 0000000000..087ea465af --- /dev/null +++ b/community/minecraft/1.0.0/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: common + repository: file://../../../common + version: 1.0.6 +digest: sha256:2f1f31c15fb7f92db141a66adbb8d23a8598727730050a3883a211763a4e5472 +generated: "2023-04-25T15:26:05.856456573+03:00" diff --git a/community/minecraft/1.0.0/Chart.yaml b/community/minecraft/1.0.0/Chart.yaml new file mode 100644 index 0000000000..a585563c73 --- /dev/null +++ b/community/minecraft/1.0.0/Chart.yaml @@ -0,0 +1,25 @@ +name: minecraft +description: Minecraft is a sandbox game +annotations: + title: Minecraft +type: application +version: 1.0.0 +apiVersion: v2 +appVersion: '2023.3.0' +kubeVersion: '>=1.16.0-0' +maintainers: + - name: truenas + url: https://www.truenas.com/ + email: dev@ixsystems.com +dependencies: + - name: common + repository: file://../../../common + version: 1.0.6 +home: https://www.minecraft.net/en-us +icon: https://www.minecraft.net/content/dam/games/minecraft/logos/logo-minecraft.svg +sources: + - https://www.minecraft.net/en-us + - https://github.com/truenas/charts/tree/master/community/minecraft + - https://github.com/itzg/docker-minecraft-server +keywords: + - minecraft diff --git a/community/minecraft/1.0.0/README.md b/community/minecraft/1.0.0/README.md new file mode 100644 index 0000000000..137bad3438 --- /dev/null +++ b/community/minecraft/1.0.0/README.md @@ -0,0 +1,14 @@ +# Minecraft + +[Minecraft](https://www.minecraft.net/en-us) is a sandbox game + +> Application requires to run as root. + +Depending on the `Type` of server selected, you might need to add additional +custom environment variables to the application. + +More info can be found [here](https://itzg.github.io/docker-minecraft-docs/java/server-types/bukkit-spigot/) +Select the type on the sidebar. + +Note that some values are only applicable during the world generation. +More info can be found [here](https://itzg.github.io/docker-minecraft-docs/) diff --git a/community/minecraft/1.0.0/app-readme.md b/community/minecraft/1.0.0/app-readme.md new file mode 100644 index 0000000000..137bad3438 --- /dev/null +++ b/community/minecraft/1.0.0/app-readme.md @@ -0,0 +1,14 @@ +# Minecraft + +[Minecraft](https://www.minecraft.net/en-us) is a sandbox game + +> Application requires to run as root. + +Depending on the `Type` of server selected, you might need to add additional +custom environment variables to the application. + +More info can be found [here](https://itzg.github.io/docker-minecraft-docs/java/server-types/bukkit-spigot/) +Select the type on the sidebar. + +Note that some values are only applicable during the world generation. +More info can be found [here](https://itzg.github.io/docker-minecraft-docs/) diff --git a/community/minecraft/1.0.0/charts/common-1.0.6.tgz b/community/minecraft/1.0.0/charts/common-1.0.6.tgz new file mode 100644 index 0000000000000000000000000000000000000000..afbd26023c7c4c18b6d3a61a9db9c051c1ee49d6 GIT binary patch literal 54954 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 + Depending on the image you select, you might + need to adjust the Version and Type fields. + schema: + type: string + default: "j17Image" + required: true + enum: + - value: j8Image + description: Java 8 HotSpot (Alpine) + - value: j8j9Image + description: Java 8 OpenJ9 (Debian) + - value: j8jdkImage + description: Java 8 HotSpot+JDK (Ubuntu) + - value: j8gceImage + description: Java 8 GraalVM CE (Oracle) + - value: j11Image + description: Java 11 HotSpot (Ubuntu) + - value: j11j9Image + description: Java 11 OpenJ9 (Debian) + - value: j11jdkImage + description: Java 11 HotSpot+JDK (Ubuntu) + - value: j17Image + description: Java 17 HotSpot (Ubuntu) + - value: j17j9Image + description: Java 17 OpenJ9 (Debian) + - value: j17jdkImage + description: Java 17 HotSpot+JDK (Ubuntu) + - value: j17gceImage + description: Java 17 GraalVM CE (Oracle) + - value: j17alpineImage + description: Java 17 HotSpot (Alpine) + - value: j19Image + description: Java 19 HotSpot (Ubuntu) + - variable: type + label: Type + description: | + The type of Minecraft server to run.
+ Depending on the type you select, you might need + to add additional environment variables.
+ https://itzg.github.io/docker-minecraft-docs/java/server-types/bukkit-spigot + schema: + type: string + default: "VANILLA" + required: true + enum: + - value: VANILLA + description: Vanilla + - value: SPIGOT + description: Spigot + - value: BUKKIT + description: Bukkit + - value: FORGE + description: Forge + - value: CATSERVER + description: CatServer + - value: CRUCIBLE + description: Crucible + - value: AUTO_CURSEFORGE + description: Auto CurseForge + - value: CUSTOM + description: Custom + - value: FABRIC + description: Fabric + - value: FTBA + description: Feed The Beast + - value: FORGE + description: Forge + - value: LOLISERVER + description: LoliServer + - value: LIMBO + description: Limbo + - value: MAGMA + description: Magma + - value: MOHIST + description: Mohist + - value: FABRIC + description: Fabric + - value: PAPER + description: Paper + - value: PUFFERFISH + description: Pufferfish + - value: PURPUR + description: Purpur + - value: QUILT + description: Quilt + - value: SPONGEVANILLA + description: SpongeVanilla + - variable: version + label: Version + description: | + The minecraft version.
+ https://itzg.github.io/docker-minecraft-docs/java/versions/minecraft + schema: + type: string + default: "LATEST" + required: true + - variable: serverName + label: Server Name + description: | + The name of the Minecraft server.
+ https://itzg.github.io/docker-minecraft-docs/java/configuration/servername + schema: + type: string + default: "Minecraft Server" + required: true + - variable: difficulty + label: Difficulty + description: | + The difficulty of the Minecraft server.
+ https://itzg.github.io/docker-minecraft-docs/java/configuration/difficulty + schema: + type: string + default: "easy" + required: true + enum: + - value: peaceful + description: Peaceful + - value: easy + description: Easy + - value: normal + description: Normal + - value: hard + description: Hard + - variable: seed + label: Seed + description: | + The seed for the Minecraft server.
+ https://itzg.github.io/docker-minecraft-docs/java/configuration/seed
+ (Quotes is handled by the field automatically) + schema: + type: string + default: "" + - variable: mode + label: Game Mode + description: | + The game mode of the Minecraft server.
+ https://itzg.github.io/docker-minecraft-docs/java/configuration/gamemode + schema: + type: string + default: "survival" + required: true + enum: + - value: survival + description: Survival + - value: creative + description: Creative + - value: adventure + description: Adventure + - value: spectator + description: Spectator + - variable: levelType + label: Level Type + description: | + The level type of the Minecraft server.
+ https://itzg.github.io/docker-minecraft-docs/java/configuration/#level-type-and-generator-settings + schema: + type: string + default: "minecraft:default" + required: true + enum: + - value: minecraft:default + description: Default + - value: minecraft:flat + description: Flat + - value: minecraft:large_biomes + description: Large Biomes + - value: minecraft:amplified + description: Amplified + - value: minecraft:single_biome_surface + description: Single Biome Surface + - value: buffet + description: Buffet + - value: customized + description: Customized + - variable: motd + label: Message of the Day + description: | + The message of the day for the Minecraft server.
+ https://itzg.github.io/docker-minecraft-docs/java/configuration/motd + schema: + type: string + default: "Welcome to Minecraft on TrueNAS!" + required: true + - variable: enableRcon + label: Enable RCON + description: | + Enable RCON for the Minecraft server.
+ It is recommended to keep this enabled, as it helps to + shut down the minecraft server gracefully.
+ https://itzg.github.io/docker-minecraft-docs/java/rcon + schema: + type: boolean + default: true + - variable: rconPassword + label: RCON Password + description: The RCON password for the Minecraft server. + schema: + type: string + default: "" + show_if: [["enableRcon", "=", true]] + private: true + required: true + - variable: maxPlayers + label: Max Players + description: | + The maximum number of players that can join the server.
+ https://itzg.github.io/docker-minecraft-docs/java/configuration/maxplayers + schema: + type: int + default: 20 + min: 1 + required: true + - variable: maxWorldSize + label: Max World Size + description: | + The maximum possible size in blocks, expressed as a radius.
+ https://itzg.github.io/docker-minecraft-docs/java/configuration/maxworldsize + schema: + type: int + default: 10000 + min: 1 + required: true + - variable: maxBuildHeight + label: Max Build Height + description: | + The maximum height in which building is allowed. + Terrain may still naturally generate above a low height limit.
+ https://itzg.github.io/docker-minecraft-docs/java/configuration/maxbuildheight + schema: + type: int + default: 256 + min: 1 + required: true + - variable: allowNether + label: Allow Nether + description: | + Allows players to travel to the Nether.
+ https://itzg.github.io/docker-minecraft-docs/java/configuration/allownether + schema: + type: boolean + default: true + - variable: announcePlayerAchievements + label: Announce Player Achievements + description: | + Allows server to announce when a player gets an achievement.
+ https://itzg.github.io/docker-minecraft-docs/java/configuration/announceachievements + schema: + type: boolean + default: true + - variable: enableCommandBlock + label: Enable Command Block + description: | + Enables the command blocks.
+ https://itzg.github.io/docker-minecraft-docs/java/configuration/enablecommandblock + schema: + type: boolean + default: false + - variable: forceGameMode + label: Force Game Mode + description: | + Force players to join in the default game mode.
+ https://itzg.github.io/docker-minecraft-docs/java/configuration/forcegamemode + schema: + type: boolean + default: false + - variable: generateStructures + label: Generate Structures + description: | + Defines whether structures (such as villages) will be generated.
+ https://itzg.github.io/docker-minecraft-docs/java/configuration/generatestructures + schema: + type: boolean + default: true + - variable: hardcore + label: Hardcore + description: | + If set to true, players will be set to spectator mode if they die.
+ https://itzg.github.io/docker-minecraft-docs/java/configuration/hardcore + schema: + type: boolean + default: false + - variable: spawnAnimals + label: Spawn Animals + description: | + Determines if animals will be able to spawn.
+ https://itzg.github.io/docker-minecraft-docs/java/configuration/spawnanimals + schema: + type: boolean + default: true + - variable: spawnNpcs + label: Spawn NPCs + description: | + Determines if villagers will be spawned.
+ https://itzg.github.io/docker-minecraft-docs/java/configuration/spawnnpcs + schema: + type: boolean + default: true + - variable: spawnMonsters + label: Spawn Monsters + description: | + Determines if monsters will be spawned.
+ https://itzg.github.io/docker-minecraft-docs/java/configuration/spawnmonsters + schema: + type: boolean + default: true + - variable: spawnProtection + label: Spawn Protection + description: | + The radius of the spawn protection.
+ https://itzg.github.io/docker-minecraft-docs/java/configuration/spawnprotection + schema: + type: int + default: 16 + min: 0 + required: true + - variable: pvp + label: PVP + description: | + Determines if PVP will be enabled.
+ https://itzg.github.io/docker-minecraft-docs/java/configuration/pvp + schema: + type: boolean + default: true + - variable: allowFlight + label: Allow Flight + description: | + Allows users to use flight on your server while in Survival mode, + if they have a mod that provides flight installed.
+ https://itzg.github.io/docker-minecraft-docs/java/configuration/allowflight + schema: + type: boolean + default: false + - variable: viewDistance + label: View Distance + description: | + Sets the amount of world data the server sends the client, + measured in chunks in each direction of the player (radius, not diameter). + It determines the server-side viewing distance.
+ https://itzg.github.io/docker-minecraft-docs/java/configuration/viewdistance + schema: + type: int + default: 10 + min: 3 + max: 32 + required: true + - variable: onlineMode + label: Online Mode + description: | + If set to true, the server will attempt to authenticate clients + connecting to it with the Minecraft account database.
+ https://itzg.github.io/docker-minecraft-docs/java/configuration/onlinemode + schema: + type: boolean + default: true + - variable: maxTickTime + label: Max Tick Time + description: | + The maximum number of milliseconds a single tick may take + before the server watchdog stops the server with the message, + A single server tick took 60.00 seconds (should be max 0.05); + Considering it to be crashed, server will forcibly shutdown.
+ https://itzg.github.io/docker-minecraft-docs/java/configuration/maxticktime + schema: + type: int + default: 60000 + min: 0 + required: true + - variable: ops + label: Operators / Administrators + description: | + A list of player names who should be considered operators.
+ https://itzg.github.io/docker-minecraft-docs/java/configuration/ops + schema: + type: list + default: [] + items: + - variable: opPlayer + label: OP Player + schema: + type: string + default: "" + required: true + - variable: whitelist + label: Whitelist + description: | + A list of player names who are allowed to play on the server.
+ https://itzg.github.io/docker-minecraft-docs/java/configuration/whitelist + schema: + type: list + default: [] + items: + - variable: whitePlayer + label: Whitelisted Player + schema: + type: string + default: "" + required: true + - variable: additionalEnvs + label: Additional Environment Variables + description: Configure additional environment variables for Minecraft. + schema: + type: list + default: [] + items: + - variable: env + label: Environment Variable + schema: + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: value + label: Value + schema: + type: string + required: true + - variable: mcID + label: "" + group: User and Group Configuration + schema: + type: dict + attrs: + - variable: user + label: User ID + description: The user id that Minecraft files will be owned by. + schema: + type: int + min: 568 + default: 568 + required: true + - variable: group + label: Group ID + description: The group id that Minecraft files will be owned by. + schema: + type: int + min: 568 + default: 568 + required: true + + - variable: mcNetwork + label: "" + group: Network Configuration + schema: + type: dict + attrs: + - variable: hostNetwork + label: Host Network + description: | + Bind to the host network. It's recommended to keep this disabled.
+ schema: + type: boolean + default: false + - variable: serverPort + label: Server Port + description: | + The port for the Minecraft Server.
+ This will apply to both external and internal ports. + schema: + type: int + default: 25535 + min: 9000 + max: 65535 + required: true + - variable: rconPort + label: RCON Port + description: | + The RCON port for the Minecraft.
+ This will apply to both external and internal ports. + schema: + type: int + default: 25575 + min: 9000 + max: 65535 + required: true + + - variable: mcStorage + label: "" + group: Storage Configuration + schema: + type: dict + attrs: + - variable: data + label: Minecraft Data Storage + description: The path to store Minecraft Data. + schema: + type: dict + attrs: + - variable: type + label: Type + description: | + ixVolume: Is dataset created automatically by the system.
+ Host Path: Is a path that already exists on the system. + schema: + type: string + required: true + default: "ixVolume" + enum: + - value: "hostPath" + description: Host Path (Path that already exists on the system) + - value: "ixVolume" + description: ixVolume (Dataset created automatically by the system) + - variable: datasetName + label: Dataset Name + schema: + type: string + show_if: [["type", "=", "ixVolume"]] + required: true + hidden: true + immutable: true + default: "data" + $ref: + - "normalize/ixVolume" + - variable: hostPath + label: Host Path + schema: + type: hostpath + show_if: [["type", "=", "hostPath"]] + immutable: true + required: true + - variable: additionalStorages + label: Additional Storage + description: Additional storage for Minecraft. + schema: + type: list + default: [] + items: + - variable: storageEntry + label: Storage Entry + schema: + type: dict + attrs: + - variable: type + label: Type + description: | + ixVolume: Is dataset created automatically by the system.
+ Host Path: Is a path that already exists on the system. + schema: + type: string + required: true + default: "ixVolume" + enum: + - value: "hostPath" + description: Host Path (Path that already exists on the system) + - value: "ixVolume" + description: ixVolume (Dataset created automatically by the system) + - variable: mountPath + label: Mount Path + description: The path inside the container to mount the storage. + schema: + type: path + required: true + - variable: hostPath + label: Host Path + description: The host path to use for storage. + schema: + type: hostpath + show_if: [["type", "=", "hostPath"]] + required: true + - variable: datasetName + label: Dataset Name + description: The name of the dataset to use for storage. + schema: + type: string + show_if: [["type", "=", "ixVolume"]] + required: true + immutable: true + default: "storage_entry" + $ref: + - "normalize/ixVolume" + + - variable: resources + group: Resources Configuration + label: "" + schema: + type: dict + attrs: + - variable: limits + label: Limits + schema: + type: dict + attrs: + - variable: cpu + label: CPU + description: CPU limit for Minecraft. + schema: + type: string + default: "4000m" + required: true + - variable: memory + label: Memory + description: Memory limit for Minecraft. + schema: + type: string + default: "8Gi" + required: true diff --git a/community/minecraft/1.0.0/templates/NOTES.txt b/community/minecraft/1.0.0/templates/NOTES.txt new file mode 100644 index 0000000000..ba4e01146c --- /dev/null +++ b/community/minecraft/1.0.0/templates/NOTES.txt @@ -0,0 +1 @@ +{{ include "ix.v1.common.lib.chart.notes" $ }} diff --git a/community/minecraft/1.0.0/templates/_configuration.tpl b/community/minecraft/1.0.0/templates/_configuration.tpl new file mode 100644 index 0000000000..b2b020b64e --- /dev/null +++ b/community/minecraft/1.0.0/templates/_configuration.tpl @@ -0,0 +1,83 @@ +{{- define "minecraft.configuration" -}} +{{- include "minecraft.validation" $ }} +configmap: + minecraft-config: + enabled: true + data: + {{/* + There is no GUI in the container, + but some old versions think that there is + */}} + GUI: "FALSE" + EULA: {{ .Values.mcConfig.eula | quote | upper }} + ENABLE_RCON: {{ .Values.mcConfig.enableRcon | quote | upper }} + SERVER_PORT: {{ .Values.mcNetwork.serverPort | quote }} + {{ if .Values.mcConfig.enableRcon }} + RCON_PORT: {{ .Values.mcNetwork.rconPort | quote }} + RCON_PASSWORD: {{ .Values.mcConfig.rconPassword | quote }} + {{ end }} + VERSION: {{ .Values.mcConfig.version | quote }} + TYPE: {{ .Values.mcConfig.type | quote }} + {{ with .Values.mcConfig.seed }} + SEED: {{ . | quote }} + {{ end }} + MOTD: {{ .Values.mcConfig.motd | quote }} + DIFFICULTY: {{ .Values.mcConfig.difficulty | quote }} + SERVER_NAME: {{ .Values.mcConfig.serverName | quote }} + MAX_PLAYERS: {{ .Values.mcConfig.maxPlayers | quote }} + MAX_WORLD_SIZE: {{ .Values.mcConfig.maxWorldSize | quote }} + ALLOW_NETHER: {{ .Values.mcConfig.allowNether | quote | upper }} + ANNOUNCE_PLAYER_ACHIEVEMENTS: {{ .Values.mcConfig.announcePlayerAchievements | quote | upper }} + ENABLE_COMMAND_BLOCK: {{ .Values.mcConfig.enableCommandBlock | quote | upper }} + FORCE_GAMEMODE: {{ .Values.mcConfig.forceGameMode | quote | upper }} + GENERATE_STRUCTURES: {{ .Values.mcConfig.generateStructures | quote | upper }} + HARDCORE: {{ .Values.mcConfig.hardcore | quote | upper }} + MAX_BUILD_HEIGHT: {{ .Values.mcConfig.maxBuildHeight | quote }} + SPAWN_ANIMALS: {{ .Values.mcConfig.spawnAnimals | quote | upper }} + SPAWN_MONSTERS: {{ .Values.mcConfig.spawnMonsters | quote | upper }} + SPAWN_NPCS: {{ .Values.mcConfig.spawnNpcs | quote | upper }} + SPAWN_PROTECTION: {{ .Values.mcConfig.spawnProtection | quote }} + VIEW_DISTANCE: {{ .Values.mcConfig.viewDistance | quote }} + PVP: {{ .Values.mcConfig.pvp | quote | upper }} + LEVEL_TYPE: {{ .Values.mcConfig.levelType | quote }} + ALLOW_FLIGHT: {{ .Values.mcConfig.allowFlight | quote | upper }} + ONLINE_MODE: {{ .Values.mcConfig.onlineMode | quote | upper }} + MAX_TICK_TIME: {{ .Values.mcConfig.maxTickTime | quote }} + {{ with .Values.mcConfig.ops }} + OPS: {{ join "," . | quote }} + {{ end }} + {{ with .Values.mcConfig.whitelist }} + WHITELIST: {{ join "," . | quote }} + {{ end }} +{{- end -}} + +{{- define "minecraft.validation" -}} + {{- if not .Values.mcConfig.eula -}} + {{- fail "Minecraft - You have to accept EULA" -}} + {{- end -}} + + {{- $types := (list "VANILLA" "SPIGOT" "BUKKIT" "CATSERVER" "CRUCIBLE" + "AUTO_CURSEFORGE" "CUSTOM" "FABRIC" "FTBA" "FORGE" + "LOLISERVER" "LIMBO" "MAGMA" "MOHIST" "FABRIC" "PAPER" + "PUFFERFISH" "PURPUR" "QUILT") -}} + {{- if not (mustHas .Values.mcConfig.type $types) -}} + {{- fail (printf "Minecraft - Expected [Type] to be one of [%s], but got [%s]" (join ", " $types) .Values.mcConfig.type) -}} + {{- end -}} + + {{- $difficulties := (list "peaceful" "easy" "normal" "hard") -}} + {{- if not (mustHas .Values.mcConfig.difficulty $difficulties) -}} + {{- fail (printf "Minecraft - Expected [Difficulty] to be one of [%s], but got [%s]" (join ", " $difficulties) .Values.mcConfig.difficulty) -}} + {{- end -}} + + {{- $modes := (list "creative" "survival" "adventure" "spectator") -}} + {{- if not (mustHas .Values.mcConfig.mode $modes) -}} + {{- fail (printf "Minecraft - Expected [Mode] to be one of [%s], but got [%s]" (join ", " $modes) .Values.mcConfig.mode) -}} + {{- end -}} + + {{- $lvlTypes := (list "minecraft:default" "minecraft:flat" "minecraft:large_biomes" + "minecraft:amplified" "minecraft:single_biome_surface" "buffet" "customized") -}} + {{- if not (mustHas .Values.mcConfig.levelType $lvlTypes) -}} + {{- fail (printf "Minecraft - Expected [Level Type] to be one of [%s], but got [%s]" (join ", " $lvlTypes) .Values.mcConfig.levelType) -}} + {{- end -}} + +{{- end -}} diff --git a/community/minecraft/1.0.0/templates/_minecraft.tpl b/community/minecraft/1.0.0/templates/_minecraft.tpl new file mode 100644 index 0000000000..6d50a6ce5d --- /dev/null +++ b/community/minecraft/1.0.0/templates/_minecraft.tpl @@ -0,0 +1,98 @@ +{{- define "minecraft.workload" -}} +workload: + minecraft: + enabled: true + primary: true + type: Deployment + podSpec: + hostNetwork: {{ .Values.mcNetwork.hostNetwork }} + securityContext: + fsGroup: {{ .Values.mcID.group }} + containers: + minecraft: + enabled: true + primary: true + tty: true + stdin: true + imageSelector: {{ .Values.mcConfig.imageSelector }} + securityContext: + runAsUser: 0 + runAsGroup: 0 + readOnlyRootFilesystem: false + runAsNonRoot: false + capabilities: + add: + - CHOWN + - DAC_OVERRIDE + - FOWNER + - SETUID + - SETGID + fixedEnv: + PUID: {{ .Values.mcID.user }} + envFrom: + - configMapRef: + name: minecraft-config + {{ with .Values.mcConfig.additionalEnvs }} + envList: + {{ range $env := . }} + - name: {{ $env.name }} + value: {{ $env.value }} + {{ end }} + {{ end }} + probes: + liveness: + enabled: true + type: exec + command: mc-health + readiness: + enabled: true + type: exec + command: mc-health + startup: + enabled: true + type: exec + command: mc-health + initialDelaySeconds: 120 +{{/* Service */}} +service: + minecraft: + enabled: true + primary: true + type: NodePort + targetSelector: minecraft + ports: + server: + enabled: true + primary: true + port: {{ .Values.mcNetwork.serverPort }} + nodePort: {{ .Values.mcNetwork.serverPort }} + targetSelector: minecraft + rcon: + enabled: {{ .Values.mcConfig.enableRcon }} + port: {{ .Values.mcNetwork.rconPort }} + nodePort: {{ .Values.mcNetwork.rconPort }} + targetSelector: minecraft + +{{/* Persistence */}} +persistence: + data: + enabled: true + type: {{ .Values.mcStorage.data.type }} + datasetName: {{ .Values.mcStorage.data.datasetName | default "" }} + hostPath: {{ .Values.mcStorage.data.hostPath | default "" }} + targetSelector: + minecraft: + minecraft: + mountPath: /data + {{- range $idx, $storage := .Values.mcStorage.additionalStorages }} + {{ printf "mc-%v" (int $idx) }}: + enabled: true + type: {{ $storage.type }} + datasetName: {{ $storage.datasetName | default "" }} + hostPath: {{ $storage.hostPath | default "" }} + targetSelector: + minecraft: + minecraft: + mountPath: {{ $storage.mountPath }} + {{- end }} +{{- end -}} diff --git a/community/minecraft/1.0.0/templates/common.yaml b/community/minecraft/1.0.0/templates/common.yaml new file mode 100644 index 0000000000..bcda9c575c --- /dev/null +++ b/community/minecraft/1.0.0/templates/common.yaml @@ -0,0 +1,7 @@ +{{- include "ix.v1.common.loader.init" . -}} + +{{/* Merge the templates with Values */}} +{{- $_ := mustMergeOverwrite .Values (include "minecraft.configuration" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "minecraft.workload" $ | fromYaml) -}} + +{{- include "ix.v1.common.loader.apply" . -}} diff --git a/community/minecraft/item.yaml b/community/minecraft/item.yaml new file mode 100644 index 0000000000..72a3b37867 --- /dev/null +++ b/community/minecraft/item.yaml @@ -0,0 +1,3 @@ +icon_url: https://www.minecraft.net/content/dam/games/minecraft/logos/logo-minecraft.svg +categories: + - minecraft