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: