From 51b7ec117d04e8e5a2f5d34c3db1bf28618b1a14 Mon Sep 17 00:00:00 2001 From: Matt Culler Date: Wed, 15 Jan 2025 13:23:01 -0500 Subject: [PATCH 1/4] feat: allow use of interceptable mknod in ProviderService --- craft_application/services/provider.py | 16 ++++++++++++++-- pyproject.toml | 3 ++- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/craft_application/services/provider.py b/craft_application/services/provider.py index b99e65a27..1be3ce979 100644 --- a/craft_application/services/provider.py +++ b/craft_application/services/provider.py @@ -51,9 +51,14 @@ class ProviderService(base.ProjectService): """Manager for craft_providers in an application. - :param app: Metadata about this application. + :param app: Metadata about this application + :param services: Factory class for lazy-loading service classes :param project: The project model + :param work_dir: The working directory for parts processing + :param build_plan: The filtered build plan of platforms that are valid for + :param provider_name: The provider to use - "lxd" or "multipass" :param install_snap: Whether to install this app's snap from the host (default True) + :param intercept_mknod: If the host can, tell LXD instance to intercept mknod """ managed_mode_env_var = platforms.ENVIRONMENT_CRAFT_MANAGED_MODE @@ -68,6 +73,7 @@ def __init__( build_plan: list[models.BuildInfo], provider_name: str | None = None, install_snap: bool = True, + intercept_mknod: bool = True, ) -> None: super().__init__(app, services, project=project) self._provider: craft_providers.Provider | None = None @@ -75,6 +81,8 @@ def __init__( self._build_plan = build_plan self.snaps: list[Snap] = [] self._install_snap = install_snap + self._intercept_mknod = intercept_mknod + self.environment: dict[str, str | None] = {self.managed_mode_env_var: "1"} self.packages: list[str] = [] # this is a private attribute because it may not reflect the actual @@ -309,7 +317,11 @@ def _get_provider_by_name(self, name: str) -> craft_providers.Provider: def _get_lxd_provider(self) -> LXDProvider: """Get the LXD provider for this manager.""" lxd_remote = self._services.config.get("lxd_remote") - return LXDProvider(lxd_project=self._app.name, lxd_remote=lxd_remote) + return LXDProvider( + lxd_project=self._app.name, + lxd_remote=lxd_remote, + intercept_mknod=self._intercept_mknod, + ) def _get_multipass_provider(self) -> MultipassProvider: """Get the Multipass provider for this manager.""" diff --git a/pyproject.toml b/pyproject.toml index 50454028e..18b9b11cb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,7 +9,8 @@ dependencies = [ "craft-grammar>=2.0.0", "craft-parts>=2.1.1", "craft-platforms>=0.5.0", - "craft-providers>=2.1.0", + "craft-providers @ git+https://github.com/canonical/craft-providers.git@work/CRAFT-2568-settable-mknod-intercept", + #"craft-providers>=2.1.0", "Jinja2~=3.1", "snap-helpers>=0.4.2", "platformdirs>=3.10", From 84611539dc5846aa8520035167575714f6c3c1b3 Mon Sep 17 00:00:00 2001 From: Matt Culler Date: Thu, 16 Jan 2025 10:43:30 -0500 Subject: [PATCH 2/4] fix: unit test --- tests/unit/services/test_provider.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/unit/services/test_provider.py b/tests/unit/services/test_provider.py index c525405bd..8061ed4c0 100644 --- a/tests/unit/services/test_provider.py +++ b/tests/unit/services/test_provider.py @@ -237,7 +237,7 @@ def test_get_lxd_provider(monkeypatch, provider_service, lxd_remote, check): check.equal(actual, mock_provider.return_value) with check: mock_provider.assert_called_once_with( - lxd_project="testcraft", lxd_remote=lxd_remote + lxd_project="testcraft", lxd_remote=lxd_remote, intercept_mknod=True ) From becf92a1e46f749e546839f13cf4ffe4c29e9a29 Mon Sep 17 00:00:00 2001 From: Matt Culler Date: Thu, 16 Jan 2025 11:42:25 -0500 Subject: [PATCH 3/4] chore: add manual apt target --- pyproject.toml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pyproject.toml b/pyproject.toml index 18b9b11cb..24935e06e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -84,6 +84,10 @@ docs = [ apt = [ "python-apt>=2.4.0;sys_platform=='linux'", ] +apt-manual = [ + # Install this with "pip install .[apt-manual]" to get a functioning test environment + "python-apt @ https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/python-apt/2.4.0ubuntu2/python-apt_2.4.0ubuntu2.tar.xz ; sys_platform == 'linux'" +] [build-system] requires = [ From 9ddbefcf0b97ab7870defd5591d33aaaa776b2d0 Mon Sep 17 00:00:00 2001 From: Matt Culler Date: Tue, 4 Feb 2025 15:48:53 -0500 Subject: [PATCH 4/4] build(deps): c-providers branch merged and deleted, switch to main --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 24935e06e..09fc810b2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,7 +9,7 @@ dependencies = [ "craft-grammar>=2.0.0", "craft-parts>=2.1.1", "craft-platforms>=0.5.0", - "craft-providers @ git+https://github.com/canonical/craft-providers.git@work/CRAFT-2568-settable-mknod-intercept", + "craft-providers @ git+https://github.com/canonical/craft-providers.git@main", #"craft-providers>=2.1.0", "Jinja2~=3.1", "snap-helpers>=0.4.2",