From b2a3c87b46961da868e89046e65759c870889aa9 Mon Sep 17 00:00:00 2001 From: John Hardy Date: Fri, 23 Oct 2026 13:20:41 +0100 Subject: [PATCH] Remove EE container after awx-manage inventory_import inventory_import builds its own podman run command and omits --rm, unlike ansible-runner which always passes it. Each CLI import leaves an exited container behind, eventually filling disk. Related: AAPRFE-370 --- awx/main/management/commands/inventory_import.py | 13 ++++++++++++- .../tests/unit/commands/test_inventory_import.py | 16 +++++++++++++++- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/awx/main/management/commands/inventory_import.py b/awx/main/management/commands/inventory_import.py index feb4331d81..3ce1071321 100644 --- a/awx/main/management/commands/inventory_import.py +++ b/awx/main/management/commands/inventory_import.py @@ -75,7 +75,18 @@ class AnsibleInventoryLoader(object): self.verbosity = verbosity def get_base_args(self): - bargs = ['podman', 'run', '--user=root', '--quiet'] + """ + Build base Podman arguments for running ansible-inventory in a container. + + Returns a list of command-line arguments for executing ansible-inventory + inside the default execution environment container. Includes volume mounts + for the inventory source, environment variables, and the --rm flag to + automatically remove the container after execution. + + Returns: + list: Base command arguments for Podman container execution + """ + bargs = ['podman', 'run', '--rm', '--user=root', '--quiet'] bargs.extend(['-v', '{0}:{0}:Z'.format(self.source)]) for key, value in STANDARD_INVENTORY_UPDATE_ENV.items(): bargs.extend(['-e', '{0}={1}'.format(key, value)]) diff --git a/awx/main/tests/unit/commands/test_inventory_import.py b/awx/main/tests/unit/commands/test_inventory_import.py index 96896347fd..3c563aff46 100644 --- a/awx/main/tests/unit/commands/test_inventory_import.py +++ b/awx/main/tests/unit/commands/test_inventory_import.py @@ -2,13 +2,15 @@ # All Rights Reserved # Python +from unittest import mock + import pytest # Django from django.core.management.base import CommandError # AWX -from awx.main.management.commands.inventory_import import Command +from awx.main.management.commands.inventory_import import AnsibleInventoryLoader, Command @pytest.mark.inventory_import @@ -34,3 +36,15 @@ class TestInvalidOptions: cmd.handle(inventory_id=42) assert '--source' in str(err.value) assert 'required' in str(err.value) + + +@pytest.mark.inventory_import +def test_base_args_remove_container_on_exit(): + ee = mock.Mock(image='quay.io/ansible/awx-ee:latest', credential=None) + with ( + mock.patch('awx.main.management.commands.inventory_import.get_default_execution_environment', return_value=ee), + mock.patch('awx.main.management.commands.inventory_import.settings') as s, + ): + s.IS_K8S = False + bargs = AnsibleInventoryLoader('/tmp/inv').get_base_args() + assert bargs[:3] == ['podman', 'run', '--rm']