mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
fix remove_orphans using APIs exposed via AnsibleDockerClient (#54316)
Co-Authored-By: sluther <neenach2002@gmail.com>
This commit is contained in:
parent
90c067e947
commit
5517b0384f
2 changed files with 22 additions and 1 deletions
2
changelogs/fragments/26937-fix-remove-orphans.yml
Normal file
2
changelogs/fragments/26937-fix-remove-orphans.yml
Normal file
|
@ -0,0 +1,2 @@
|
|||
bugfixes:
|
||||
- docker_compose - fixed an issue where ``remove_orphans`` doesn't work reliably.
|
|
@ -463,7 +463,7 @@ try:
|
|||
from compose.cli.command import project_from_options
|
||||
from compose.service import NoSuchImageError
|
||||
from compose.cli.main import convergence_strategy_from_opts, build_action_from_opts, image_type_from_opt
|
||||
from compose.const import DEFAULT_TIMEOUT
|
||||
from compose.const import DEFAULT_TIMEOUT, LABEL_SERVICE, LABEL_PROJECT, LABEL_ONE_OFF
|
||||
HAS_COMPOSE = True
|
||||
HAS_COMPOSE_EXC = None
|
||||
MINIMUM_COMPOSE_VERSION = '1.7.0'
|
||||
|
@ -717,6 +717,25 @@ class ContainerManager(DockerBaseClass):
|
|||
result['changed'] = build_output['changed']
|
||||
result['actions'] += build_output['actions']
|
||||
|
||||
if self.remove_orphans:
|
||||
containers = self.client.containers(
|
||||
filters={
|
||||
'label': [
|
||||
'{0}={1}'.format(LABEL_PROJECT, self.project.name),
|
||||
'{0}={1}'.format(LABEL_ONE_OFF, "False")
|
||||
],
|
||||
}
|
||||
)
|
||||
|
||||
orphans = []
|
||||
for container in containers:
|
||||
service_name = container.get('Labels', {}).get(LABEL_SERVICE)
|
||||
if service_name not in self.project.service_names:
|
||||
orphans.append(service_name)
|
||||
|
||||
if orphans:
|
||||
result['changed'] = True
|
||||
|
||||
for service in self.project.services:
|
||||
if not service_names or service.name in service_names:
|
||||
plan = service.convergence_plan(strategy=converge)
|
||||
|
|
Loading…
Reference in a new issue