From 0d1be338c09bf5901d72df9eadd996d83b00e30d Mon Sep 17 00:00:00 2001 From: Erwan Rouchet <rouchet@teklia.com> Date: Thu, 15 Jul 2021 12:02:04 +0000 Subject: [PATCH] Retrieve WorkerRun configuration on initialization --- arkindex_worker/worker/base.py | 10 +++++++++ tests/test_base_worker.py | 40 +++++++++++++++++++++++++++++++++- 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/arkindex_worker/worker/base.py b/arkindex_worker/worker/base.py index 25e126ce..f9f9928e 100644 --- a/arkindex_worker/worker/base.py +++ b/arkindex_worker/worker/base.py @@ -62,6 +62,7 @@ class BaseWorker(object): logger.info(f"Worker will use {self.work_dir} as working directory") self.process_information = None + self.user_configuration = None self.support_cache = support_cache # use_cache will be updated in configure() if the cache is supported and if there # is at least one available sqlite database either given or in the parent tasks @@ -160,6 +161,15 @@ class BaseWorker(object): # Load all required secrets self.secrets = {name: self.load_secret(name) for name in required_secrets} + # Load worker run configuration when available and not in dev mode + if os.environ.get("ARKINDEX_WORKER_RUN_ID") and not self.args.dev: + worker_run = self.request( + "RetrieveWorkerRun", id=os.environ["ARKINDEX_WORKER_RUN_ID"] + ) + self.user_configuration = worker_run.get("configuration") + if self.user_configuration: + logger.info("Loaded user configuration from WorkerRun") + task_id = os.environ.get("PONOS_TASK") paths = None if self.support_cache and self.args.database is not None: diff --git a/tests/test_base_worker.py b/tests/test_base_worker.py index 90953177..e1d45078 100644 --- a/tests/test_base_worker.py +++ b/tests/test_base_worker.py @@ -119,18 +119,56 @@ def test_cli_arg_verbose_given(mocker, mock_config_api): logger.setLevel(logging.NOTSET) -def test_configure_dev_mode(mocker, mock_user_api, mock_worker_version_api): +def test_configure_dev_mode( + mocker, monkeypatch, mock_user_api, mock_worker_version_api +): """ Configuring a worker in developer mode avoid retrieving process information """ worker = BaseWorker() mocker.patch.object(sys, "argv", ["worker", "--dev"]) + monkeypatch.setenv( + "ARKINDEX_WORKER_RUN_ID", "aaaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" + ) worker.configure() assert worker.args.dev is True assert worker.process_information is None assert worker.worker_version_id == "12341234-1234-1234-1234-123412341234" assert worker.is_read_only is True + assert worker.user_configuration is None + + +def test_configure_worker_run(mocker, monkeypatch, responses, mock_config_api): + worker = BaseWorker() + mocker.patch.object(sys, "argv", ["worker"]) + run_id = "aaaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" + monkeypatch.setenv("ARKINDEX_WORKER_RUN_ID", run_id) + responses.add( + responses.GET, + f"http://testserver/api/v1/imports/workers/{run_id}/", + json={"id": run_id, "configuration": {"a": "b"}}, + ) + worker.configure() + + assert worker.user_configuration == {"a": "b"} + + +def test_configure_worker_run_missing_conf( + mocker, monkeypatch, responses, mock_config_api +): + worker = BaseWorker() + mocker.patch.object(sys, "argv", ["worker"]) + run_id = "aaaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" + monkeypatch.setenv("ARKINDEX_WORKER_RUN_ID", run_id) + responses.add( + responses.GET, + f"http://testserver/api/v1/imports/workers/{run_id}/", + json={"id": run_id}, + ) + worker.configure() + + assert worker.user_configuration is None def test_load_missing_secret(): -- GitLab