diff --git a/changelog.d/20230412_100608_regis_palm.md b/changelog.d/20230412_100608_regis_palm.md index d470128..aff63c3 100644 --- a/changelog.d/20230412_100608_regis_palm.md +++ b/changelog.d/20230412_100608_regis_palm.md @@ -16,3 +16,4 @@ - [Improvement] Auto-complete the image names in the `images build/pull/push/printtag` commands. - [Deprecation] For local installations, Docker v20.10.15 and Compose v2.0.0 are now the minimum required versions. - [Bugfix] Make `tutor config printvalue ...` print actual yaml-formatted values, such as "true" and "null" + - 💥[Improvement] MongoDb was upgraded to 4.4. diff --git a/docs/configuration.rst b/docs/configuration.rst index 02e5ad9..4426c5b 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -75,7 +75,7 @@ This configuration paramater defines which Caddy Docker image to use. This configuration parameter defines which Elasticsearch Docker image to use. -- ``DOCKER_IMAGE_MONGODB`` (default: ``"docker.io/mongo:4.2.24"``) +- ``DOCKER_IMAGE_MONGODB`` (default: ``"docker.io/mongo:4.4.22"``) This configuration parameter defines which MongoDB Docker image to use. diff --git a/tutor/commands/upgrade/compose.py b/tutor/commands/upgrade/compose.py index 80b0092..ea0eaaf 100644 --- a/tutor/commands/upgrade/compose.py +++ b/tutor/commands/upgrade/compose.py @@ -40,7 +40,7 @@ def upgrade_from(context: click.Context, from_release: str) -> None: running_release = "olive" if running_release == "olive": - upgrade_from_olive(context) + upgrade_from_olive(context, config) running_release = "palm" @@ -51,18 +51,8 @@ def upgrade_from_ironwood(context: click.Context, config: Config) -> None: click.echo(fmt.title("Stopping any existing platform")) context.invoke(compose.stop) - if not config["RUN_MONGODB"]: - fmt.echo_info( - "You are not running MongoDB (RUN_MONGODB=false). It is your " - "responsibility to upgrade your MongoDb instance to v3.6. There is " - "nothing left to do to upgrade from Ironwood to Juniper." - ) - return - upgrade_mongodb(context, config, "3.4", "3.4") - context.invoke(compose.stop) upgrade_mongodb(context, config, "3.6", "3.6") - context.invoke(compose.stop) def upgrade_from_juniper(context: click.Context, config: Config) -> None: @@ -150,7 +140,7 @@ def upgrade_from_maple(context: click.Context, config: Config) -> None: ) -def upgrade_from_olive(context: click.Context) -> None: +def upgrade_from_olive(context: click.Context, config: Config) -> None: # Note that we need to exec because the ora2 folder is not bind-mounted in the job # services. context.invoke(compose.start, detach=True, services=["lms"]) @@ -158,7 +148,8 @@ def upgrade_from_olive(context: click.Context) -> None: compose.execute, args=["lms", "sh", "-e", "-c", common_upgrade.PALM_RENAME_ORA2_FOLDER_COMMAND], ) - context.invoke(compose.stop) + upgrade_mongodb(context, config, "4.2.17", "4.2") + upgrade_mongodb(context, config, "4.4.22", "4.4") def upgrade_mongodb( @@ -167,6 +158,13 @@ def upgrade_mongodb( to_docker_version: str, to_compatibility_version: str, ) -> None: + if not config["RUN_MONGODB"]: + fmt.echo_info( + f"You are not running MongoDB (RUN_MONGODB=false). It is your " + f"responsibility to upgrade your MongoDb instance to {to_docker_version}." + ) + return + click.echo(fmt.title(f"Upgrading MongoDb to v{to_docker_version}")) # Note that the DOCKER_IMAGE_MONGODB value is never saved, because we only save the # environment, not the configuration. diff --git a/tutor/commands/upgrade/k8s.py b/tutor/commands/upgrade/k8s.py index df83ead..b84ac4f 100644 --- a/tutor/commands/upgrade/k8s.py +++ b/tutor/commands/upgrade/k8s.py @@ -44,30 +44,8 @@ def upgrade_from(context: click.Context, from_release: str) -> None: def upgrade_from_ironwood(config: Config) -> None: - if not config["RUN_MONGODB"]: - fmt.echo_info( - "You are not running MongoDB (RUN_MONGODB=false). It is your " - "responsibility to upgrade your MongoDb instance to v3.6. There is " - "nothing left to do to upgrade from Ironwood." - ) - return - message = """Automatic release upgrade is unsupported in Kubernetes. To upgrade from Ironwood, you should upgrade -your MongoDb cluster from v3.2 to v3.6. You should run something similar to: - - # Upgrade from v3.2 to v3.4 - tutor k8s stop - tutor config save --set DOCKER_IMAGE_MONGODB=mongo:3.4.24 - tutor k8s start - tutor k8s exec mongodb mongo --eval 'db.adminCommand({ setFeatureCompatibilityVersion: "3.4" })' - - # Upgrade from v3.4 to v3.6 - tutor k8s stop - tutor config save --set DOCKER_IMAGE_MONGODB=mongo:3.6.18 - tutor k8s start - tutor k8s exec mongodb mongo --eval 'db.adminCommand({ setFeatureCompatibilityVersion: "3.6" })' - - tutor config save --unset DOCKER_IMAGE_MONGODB""" - fmt.echo_info(message) + upgrade_mongodb(config, "3.4.24", "3.4") + upgrade_mongodb(config, "3.6.18", "3.6") def upgrade_from_juniper(config: Config) -> None: @@ -91,23 +69,7 @@ your MySQL database from v5.6 to v5.7. You should run something similar to: def upgrade_from_koa(config: Config) -> None: - if not config["RUN_MONGODB"]: - fmt.echo_info( - "You are not running MongoDB (RUN_MONGODB=false). It is your " - "responsibility to upgrade your MongoDb instance to v4.0. There is " - "nothing left to do to upgrade to Lilac from Koa." - ) - return - message = """Automatic release upgrade is unsupported in Kubernetes. To upgrade from Koa to Lilac, you should upgrade -your MongoDb cluster from v3.6 to v4.0. You should run something similar to: - - tutor k8s stop - tutor config save --set DOCKER_IMAGE_MONGODB=mongo:4.0.25 - tutor k8s start - tutor k8s exec mongodb mongo --eval 'db.adminCommand({ setFeatureCompatibilityVersion: "4.0" })' - tutor config save --unset DOCKER_IMAGE_MONGODB - """ - fmt.echo_info(message) + upgrade_mongodb(config, "4.0.25", "4.0") def upgrade_from_lilac(config: Config) -> None: @@ -193,3 +155,26 @@ def upgrade_from_olive(context: Context, config: Config) -> None: "lms", ["sh", "-e", "-c", common_upgrade.PALM_RENAME_ORA2_FOLDER_COMMAND], ) + upgrade_mongodb(config, "4.2.17", "4.2") + upgrade_mongodb(config, "4.4.22", "4.4") + + +def upgrade_mongodb( + config: Config, to_docker_version: str, to_compatibility_version: str +) -> None: + if not config["RUN_MONGODB"]: + fmt.echo_info( + "You are not running MongoDB (RUN_MONGODB=false). It is your " + "responsibility to upgrade your MongoDb instance to {to_docker_version}." + ) + return + message = f"""Automatic release upgrade is unsupported in Kubernetes. You should manually upgrade +your MongoDb cluster to {to_docker_version} by running something similar to: + + tutor k8s stop + tutor config save --set DOCKER_IMAGE_MONGODB=mongo:{to_docker_version} + tutor k8s start + tutor k8s exec mongodb mongo --eval 'db.adminCommand({{ setFeatureCompatibilityVersion: "{to_compatibility_version}" }})' + tutor config save --unset DOCKER_IMAGE_MONGODB + """ + fmt.echo_info(message) diff --git a/tutor/templates/config/defaults.yml b/tutor/templates/config/defaults.yml index 642d38a..afc2467 100644 --- a/tutor/templates/config/defaults.yml +++ b/tutor/templates/config/defaults.yml @@ -14,7 +14,7 @@ DOCKER_IMAGE_OPENEDX: "{{ DOCKER_REGISTRY }}overhangio/openedx:{{ TUTOR_VERSION DOCKER_IMAGE_OPENEDX_DEV: "openedx-dev:{{ TUTOR_VERSION }}" DOCKER_IMAGE_CADDY: "docker.io/caddy:2.6.4" DOCKER_IMAGE_ELASTICSEARCH: "docker.io/elasticsearch:7.17.9" -DOCKER_IMAGE_MONGODB: "docker.io/mongo:4.2.24" +DOCKER_IMAGE_MONGODB: "docker.io/mongo:4.4.22" DOCKER_IMAGE_MYSQL: "docker.io/mysql:8.0.33" DOCKER_IMAGE_PERMISSIONS: "{{ DOCKER_REGISTRY }}overhangio/openedx-permissions:{{ TUTOR_VERSION }}" DOCKER_IMAGE_REDIS: "docker.io/redis:7.0.11"