diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 9a62a00..e5330dc 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -8,7 +8,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: ['3.8', '3.12'] + python-version: ['3.12'] steps: - uses: actions/checkout@v3 - name: Set up Python ${{ matrix.python-version }} diff --git a/README.md b/README.md index fafee20..c8332a1 100644 --- a/README.md +++ b/README.md @@ -90,8 +90,8 @@ for the default lms worker deployment: def _add_celery_workers_config(workers_config): # Adding LMS extra queues workers_config["lms"]["default"]["extra_params"] = { - "pool": "gevent", - "concurrency": "100", + "--pool=gevent", + "--concurrency=100", } return workers_config diff --git a/pyproject.toml b/pyproject.toml index f6cedcd..73afbf1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,7 +7,7 @@ name = "tutor-contrib-celery" dynamic = ["version"] description = "A Tutor plugin to manage our opinionated Open edX operations" readme = "README.md" -requires-python = ">=3.8" +requires-python = ">=3.9" license = { text = "AGPLv3" } authors = [ { name = "eduNEXT" } @@ -18,14 +18,13 @@ classifiers = [ "License :: OSI Approved :: GNU Affero General Public License v3", "Operating System :: OS Independent", "Programming Language :: Python", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", ] dependencies = [ - "tutor>=18.0.0,<19.0.0" + "tutor>=18.2,<19.0.0" ] optional-dependencies = { dev = ["python-semantic-release", "pylint", "black"]} diff --git a/tutorcelery/hooks.py b/tutorcelery/hooks.py index 97d9f4c..931a2ab 100644 --- a/tutorcelery/hooks.py +++ b/tutorcelery/hooks.py @@ -20,7 +20,7 @@ class CELERY_WORKERS_ATTRS_TYPE(TypedDict): max_replicas: NotRequired[int] list_length: NotRequired[int] enable_keda: bool - extra_params: NotRequired[dict[str, str]] + extra_params: NotRequired[list[str]] CELERY_WORKERS_CONFIG: Filter[dict[str, dict[str, CELERY_WORKERS_ATTRS_TYPE]], []] = ( diff --git a/tutorcelery/patches/k8s-deployments b/tutorcelery/patches/k8s-deployments index 95b5ca1..7b33cb7 100644 --- a/tutorcelery/patches/k8s-deployments +++ b/tutorcelery/patches/k8s-deployments @@ -31,8 +31,8 @@ spec: - "--hostname=edx.{{service}}.core.{{variant}}.%%h" - "--max-tasks-per-child=100" - "--queues=edx.{{service}}.core.{{variant}}" - {% for setting, value in config.get("extra_params", {}).items() %} - - "--{{setting}}={{value}}" + {% for param in config.get("extra_params", []) %} + - "{{param}}" {% endfor %} env: - name: SERVICE_VARIANT diff --git a/tutorcelery/patches/k8s-override b/tutorcelery/patches/k8s-override deleted file mode 100644 index c434af7..0000000 --- a/tutorcelery/patches/k8s-override +++ /dev/null @@ -1,30 +0,0 @@ -{% for service in ["lms", "cms"] %} -{% set exclude = "lms" if service == "cms" else "cms" %} -{% set service_variants = iter_celery_workers_config().get(service) %} -{% set config = service_variants.get('default')%} ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: {{service}}-worker -spec: - template: - spec: - containers: - - name: {{service}}-worker - args: - - "celery" - - "--app={{service}}.celery" - - "worker" - - "--loglevel=info" - - "--hostname=edx.{{service}}.core.default.%%h" - - "--max-tasks-per-child=100" - {% if is_celery_multiqueue(service) -%} - - "--queues=edx.{{service}}.core.default" - {% else -%} - - "--exclude-queues=edx.{{exclude}}.core.default" - {% endif -%} - {% for setting, value in config.get("extra_params", {}).items() %} - - "--{{setting}}={{value}}" - {% endfor %} -{% endfor %} diff --git a/tutorcelery/plugin.py b/tutorcelery/plugin.py index afcdbd3..6000d37 100644 --- a/tutorcelery/plugin.py +++ b/tutorcelery/plugin.py @@ -80,6 +80,14 @@ def is_celery_multiqueue(service: str) -> bool: return True +@hooks.Actions.PROJECT_ROOT_READY.add() +def configure_default_workers(root: str) -> None: + if is_celery_multiqueue("lms"): + hooks.Filters.LMS_WORKER_COMMAND.add_items(["--queues=edx.lms.core.default"]) + if is_celery_multiqueue("cms"): + hooks.Filters.CMS_WORKER_COMMAND.add_items(["--queues=edx.cms.core.default"]) + + hooks.Filters.CONFIG_DEFAULTS.add_items( [ # Add your new settings that have default values here.