Skip to content

Commit 775690f

Browse files
authored
✨ Enhancement/3022/allow setting services scheduler specs (⚠️ devops) (ITISFoundation#3034)
1 parent 265c30c commit 775690f

File tree

51 files changed

+5926
-418
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+5926
-418
lines changed

.env-devel

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ BF_API_KEY=none
1515
BF_API_SECRET=none
1616

1717
CATALOG_DEV_FEATURES_ENABLED=0
18+
CATALOG_SERVICES_DEFAULT_RESOURCE='{"CPU": {"limit": 0.1, "reservation": 0.1}, "RAM": {"limit": 2147483648, "reservation": 2147483648}}'
19+
CATALOG_SERVICES_DEFAULT_SPECIFICATIONS='{}'
1820

1921
DASK_SCHEDULER_HOST=dask-scheduler
2022
DASK_SCHEDULER_PORT=8786

.pylintrc

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ extension-pkg-whitelist=pydantic,orjson,ujson
99
# paths.
1010
ignore=CVS,migration
1111

12+
# Add files or directories matching the regex patterns to the ignore-list.
13+
# The regex matches against paths and can be in Posix or Windows format.
14+
ignore-paths=^.*/generated_models/.*$
15+
1216
# Add files or directories matching the regex patterns to the blacklist. The
1317
# regex matches against base names, not paths.
1418
ignore-patterns=
@@ -18,7 +22,7 @@ ignore-patterns=
1822
#init-hook=
1923

2024
# Use multiple processes to speed up Pylint.
21-
jobs=4
25+
jobs=0
2226

2327
# List of plugins (as comma separated values of python modules names) to load,
2428
# usually to register additional checkers.

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -364,7 +364,7 @@ push-version: tag-version
364364
python3 -m venv $@
365365
## upgrading tools to latest version in $(shell python3 --version)
366366
$@/bin/pip3 --quiet install --upgrade \
367-
pip \
367+
pip~=22.0.0 \
368368
wheel \
369369
setuptools
370370
@$@/bin/pip3 list --verbose

packages/models-library/Makefile

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,19 @@ project-jsonschema.ignore.json: ## creates project-v0.0.1.json for DEV purposes
3131
.PHONY: service-jsonschema.ignore.json
3232
node-meta-jsonschema.ignore.json: ## creates node-meta-v0.0.1.json for DEV purposes
3333
python3 -c "from models_library.services import ServiceDockerData as cls; print(cls.schema_json(indent=2))" > $@
34+
35+
DOCKER_API_VERSION ?= 1.41
36+
.PHONY: docker_rest_api.py
37+
docker_rest_api.py: ## auto-generates pydantic models for Docker REST API models
38+
# auto-generates $@ from $<
39+
@$(SCRIPTS_DIR)/openapi-pydantic-models-generator.bash \
40+
--url https://docs.docker.com/engine/api/v$(DOCKER_API_VERSION).yaml \
41+
--output $@
42+
43+
# formats
44+
@black $@
45+
# copy output to src/models_library/generated_models...
46+
@mkdir --parents src/models_library/generated_models
47+
@mv $@ src/models_library/generated_models/$@
48+
@touch src/models_library/generated_models/__init__.py
49+
# done
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
from typing import Optional
2+
3+
from pydantic import Field, validator
4+
5+
from .generated_models.docker_rest_api import ContainerSpec, ServiceSpec, TaskSpec
6+
from .utils.converters import to_snake_case
7+
8+
9+
class AioDockerContainerSpec(ContainerSpec):
10+
Env: Optional[dict[str, str]] = Field(
11+
None,
12+
description="aiodocker expects here a dictionary and re-convert it back internally`.\n",
13+
)
14+
15+
@validator("Env", pre=True)
16+
@classmethod
17+
def convert_list_to_dict(cls, v):
18+
if v is not None and isinstance(v, list):
19+
converted_dict = {}
20+
for env in v:
21+
splitted_env = f"{env}".split("=", maxsplit=1)
22+
converted_dict[splitted_env[0]] = (
23+
splitted_env[1] if len(splitted_env) > 1 else None
24+
)
25+
return converted_dict
26+
return v
27+
28+
29+
class AioDockerTaskSpec(TaskSpec):
30+
ContainerSpec: Optional[AioDockerContainerSpec] = Field(
31+
None,
32+
)
33+
34+
35+
class AioDockerServiceSpec(ServiceSpec):
36+
37+
TaskTemplate: Optional[AioDockerTaskSpec] = None
38+
39+
class Config(ServiceSpec.Config):
40+
alias_generator = to_snake_case
41+
allow_population_by_field_name = True

packages/models-library/src/models_library/generated_models/__init__.py

Whitespace-only changes.

0 commit comments

Comments
 (0)