From 0c9252814a624c55f19c1fdf53a7d194d53cb183 Mon Sep 17 00:00:00 2001 From: Tim Eagles Date: Mon, 27 Dec 2021 18:33:19 -0800 Subject: [PATCH] Support for using a particular tag of the minecraft docker images. --- cdk/.env.sample | 1 + cdk/README.md | 1 + cdk/lib/config.ts | 1 + cdk/lib/minecraft-stack.ts | 2 +- cdk/lib/types.ts | 8 ++++++++ cdk/lib/util.ts | 21 ++++++++++++++++++--- 6 files changed, 30 insertions(+), 4 deletions(-) diff --git a/cdk/.env.sample b/cdk/.env.sample index 9e4bc9f..21f9b4f 100644 --- a/cdk/.env.sample +++ b/cdk/.env.sample @@ -23,3 +23,4 @@ TWILIO_AUTH_CODE = # Advanced DEBUG = false +MINECRAFT_IMAGE_TAG = diff --git a/cdk/README.md b/cdk/README.md index b68a236..7bd6b4e 100644 --- a/cdk/README.md +++ b/cdk/README.md @@ -79,6 +79,7 @@ set in `.env`. | TWILIO_ACCOUNT_ID | Twilio account ID. | -- | | TWILIO_AUTH_CODE | Twilio auth code. | -- | | DEBUG | Enables debug mode. | -- | +| MINECRAFT_IMAGE_TAG | Use a particular tag of the minecraft docker image. (e.g. java11-openj9 from https://github.com/itzg/docker-minecraft-server/blob/master/README.md#running-minecraft-server-on-different-java-version) | -- | ## Cleanup diff --git a/cdk/lib/config.ts b/cdk/lib/config.ts index 58178a6..53687a5 100644 --- a/cdk/lib/config.ts +++ b/cdk/lib/config.ts @@ -44,4 +44,5 @@ export const resolveConfig = (): StackConfig => ({ authCode: process.env.TWILIO_AUTH_CODE || '', }, debug: stringAsBoolean(process.env.DEBUG) || false, + minecraftImageTag: process.env.MINECRAFT_IMAGE_TAG || '', }); diff --git a/cdk/lib/minecraft-stack.ts b/cdk/lib/minecraft-stack.ts index 49a7816..e4d5058 100644 --- a/cdk/lib/minecraft-stack.ts +++ b/cdk/lib/minecraft-stack.ts @@ -112,7 +112,7 @@ export class MinecraftStack extends Stack { ); const minecraftServerConfig = getMinecraftServerConfig( - config.minecraftEdition + config.minecraftEdition, config.minecraftImageTag ); const minecraftServerContainer = new ecs.ContainerDefinition( diff --git a/cdk/lib/types.ts b/cdk/lib/types.ts index 40506b3..f8109ab 100644 --- a/cdk/lib/types.ts +++ b/cdk/lib/types.ts @@ -145,6 +145,14 @@ export interface StackConfig { * - CloudWatch Logs for the `minecraft-ecsfargate-watchdog` ECS Container */ debug: boolean; + /** + * The tag of the docker image to use for the + * [Minecraft Docker Server](https://github.com/itzg/docker-minecraft-server/blob/master/README.md) + * [Minecraft Bedrock Docker](https://github.com/itzg/docker-minecraft-bedrock-server/blob/master/README.md) + * + * @default '' + */ + minecraftImageTag: string; } export interface MinecraftEditionConfig { diff --git a/cdk/lib/util.ts b/cdk/lib/util.ts index 5472fb5..9005274 100644 --- a/cdk/lib/util.ts +++ b/cdk/lib/util.ts @@ -16,18 +16,33 @@ export const isDockerInstalled = (): boolean => { } }; +function imageFromTag(base:string, tag:string) { + if (tag && tag.length > 0) { + if (base.includes(':')) { + return base.substring(0, base.indexOf(':')) + ':' + tag + } else { + return base + ':' + tag; + } + } else { + return base; + } +} + export const getMinecraftServerConfig = ( - edition: StackConfig['minecraftEdition'] + edition: StackConfig['minecraftEdition'], + imageTag: StackConfig['minecraftImageTag'] ): MinecraftEditionConfig => { + const javaEditionImage = imageFromTag(constants.JAVA_EDITION_DOCKER_IMAGE, imageTag) + const bedrockEditionImage = imageFromTag(constants.BEDROCK_EDITION_DOCKER_IMAGE, imageTag) const javaConfig = { - image: constants.JAVA_EDITION_DOCKER_IMAGE, + image: javaEditionImage, port: 25565, protocol: Protocol.TCP, ingressRulePort: Port.tcp(25565), }; const bedrockConfig = { - image: constants.BEDROCK_EDITION_DOCKER_IMAGE, + image: bedrockEditionImage, port: 19132, protocol: Protocol.UDP, ingressRulePort: Port.udp(19132),