Add check_files_existing option. (#839)

This commit is contained in:
Felix Fontein 2024-04-21 16:01:07 +02:00 committed by GitHub
parent 6368854a8c
commit 8bcc3519d4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 20 additions and 1 deletions

View File

@ -0,0 +1,6 @@
minor_changes:
- "docker_compose_v2* - the new option ``check_files_existing`` allows to disable the check for one of the files
``compose.yaml``, ``compose.yml``, ``docker-compose.yaml``, and ``docker-compose.yml`` in ``project_src``
if ``files`` is not specified. This is necessary if a non-standard compose filename is specified through other
means, like the ``COMPOSE_FILE`` environment variable
(https://github.com/ansible-collections/community.docker/issues/838, https://github.com/ansible-collections/community.docker/pull/839)."

View File

@ -55,6 +55,17 @@ options:
- Equivalent to C(docker compose --profile).
type: list
elements: str
check_files_existing:
description:
- If set to V(false), the module will not check whether one of the files
C(compose.yaml), C(compose.yml), C(docker-compose.yaml), or C(docker-compose.yml)
exists in O(project_src) if O(files) is not provided.
- This can be useful if environment files with C(COMPOSE_FILE) are used to configure a different
filename. The module currently does not check for C(COMPOSE_FILE) in environment files or the
current environment.
type: bool
default: true
version_added: 3.9.0
requirements:
- "PyYAML if O(definition) is used"
notes:

View File

@ -507,6 +507,7 @@ def common_compose_argspec():
definition=dict(type='dict'),
env_files=dict(type='list', elements='path'),
profiles=dict(type='list', elements='str'),
check_files_existing=dict(type='bool', default=True),
)
@ -584,12 +585,13 @@ class BaseComposeManager(DockerBaseClass):
if not os.path.isdir(self.project_src):
self.fail('"{0}" is not a directory'.format(self.project_src))
self.check_files_existing = parameters['check_files_existing']
if self.files:
for file in self.files:
path = os.path.join(self.project_src, file)
if not os.path.exists(path):
self.fail('Cannot find Compose file "{0}" relative to project directory "{1}"'.format(file, self.project_src))
elif all(not os.path.exists(os.path.join(self.project_src, f)) for f in DOCKER_COMPOSE_FILES):
elif self.check_files_existing and all(not os.path.exists(os.path.join(self.project_src, f)) for f in DOCKER_COMPOSE_FILES):
filenames = ', '.join(DOCKER_COMPOSE_FILES[:-1])
self.fail('"{0}" does not contain {1}, or {2}'.format(self.project_src, filenames, DOCKER_COMPOSE_FILES[-1]))