Mercurial > libervia-backend
comparison libervia/backend/plugins/plugin_app_manager_docker/__init__.py @ 4247:4aa62767f501
plugin app manager: various improvements:
- Generated password must now be named and are stored, so they are re-used on following
restarts. Password size can now be specified.
- New `not` filter for `!libervia_param` to inverse a boolean value.
- Former `front_url` field has been renamed to `web_url_path` as it is the URL path used
for web frontend. All Web frontend related field are prefixed with `web_`.
- `front_url` is now used to specify a whole front URL (notably useful if an app uses its
own domain). A list can be used to retrieve a key, like for `url_prefix`, and `https`
scheme is added if no scheme is specified.
- An abstract class is now used for App Managers.
- Last application start time is stored in persistent data.
author | Goffi <goffi@goffi.org> |
---|---|
date | Fri, 31 May 2024 11:08:14 +0200 |
parents | 4b842c1fb686 |
children | 0d7bb4df2343 |
comparison
equal
deleted
inserted
replaced
4246:5eb13251fd75 | 4247:4aa62767f501 |
---|---|
20 from twisted.python.procutils import which | 20 from twisted.python.procutils import which |
21 from libervia.backend.core.i18n import _ | 21 from libervia.backend.core.i18n import _ |
22 from libervia.backend.core.constants import Const as C | 22 from libervia.backend.core.constants import Const as C |
23 from libervia.backend.core import exceptions | 23 from libervia.backend.core import exceptions |
24 from libervia.backend.core.log import getLogger | 24 from libervia.backend.core.log import getLogger |
25 from libervia.backend.plugins.plugin_misc_app_manager.models import AppManagerBackend | |
25 from libervia.backend.tools.common import async_process | 26 from libervia.backend.tools.common import async_process |
26 | 27 |
27 log = getLogger(__name__) | 28 log = getLogger(__name__) |
28 | 29 |
29 | 30 |
38 C.PI_DESCRIPTION: _( | 39 C.PI_DESCRIPTION: _( |
39 """Applications Manager for Docker"""), | 40 """Applications Manager for Docker"""), |
40 } | 41 } |
41 | 42 |
42 | 43 |
43 class AppManagerDocker: | 44 class AppManagerDocker(AppManagerBackend): |
44 name = "docker-compose" | 45 name = "docker-compose" |
45 discover_path = Path(__file__).parent | 46 discover_path = Path(__file__).parent |
46 | 47 |
47 def __init__(self, host): | 48 def __init__(self, host): |
48 log.info(_("Docker App Manager initialization")) | 49 log.info(_("Docker App Manager initialization")) |
50 self.docker_compose_path = which('docker-compose')[0] | 51 self.docker_compose_path = which('docker-compose')[0] |
51 except IndexError: | 52 except IndexError: |
52 raise exceptions.NotFound( | 53 raise exceptions.NotFound( |
53 '"docker-compose" executable not found, Docker can\'t be used with ' | 54 '"docker-compose" executable not found, Docker can\'t be used with ' |
54 'application manager') | 55 'application manager') |
55 self.host = host | 56 super().__init__(host) |
56 self._am = host.plugins['APP_MANAGER'] | |
57 self._am.register(self) | |
58 | 57 |
59 async def start(self, app_data: dict) -> None: | 58 async def start(self, app_data: dict) -> None: |
60 await self._am.start_common(app_data) | 59 await self._am.start_common(app_data) |
61 working_dir = app_data['_instance_dir_path'] | 60 working_dir = app_data['_instance_dir_path'] |
62 try: | 61 try: |
81 self.docker_compose_path, | 80 self.docker_compose_path, |
82 "down", | 81 "down", |
83 path=str(working_dir), | 82 path=str(working_dir), |
84 ) | 83 ) |
85 | 84 |
86 async def compute_expose(self, app_data: dict) -> dict: | 85 async def compute_expose(self, app_data: dict) -> None: |
87 working_dir = app_data['_instance_dir_path'] | 86 working_dir = app_data['_instance_dir_path'] |
88 expose = app_data['expose'] | 87 expose = app_data['expose'] |
89 ports = expose.get('ports', {}) | 88 ports = expose.get('ports', {}) |
90 for name, port_data in list(ports.items()): | 89 for name, port_data in list(ports.items()): |
91 try: | 90 try: |