mirror of
https://github.com/ansible-collections/community.docker.git
synced 2025-12-16 11:58:43 +00:00
docker_compose_v2_build: initial test rig
This commit is contained in:
parent
48745bf8c1
commit
c8ff5847a3
@ -0,0 +1,6 @@
|
|||||||
|
# Copyright (c) Ansible Project
|
||||||
|
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
azp/4
|
||||||
|
destructive
|
||||||
@ -0,0 +1,10 @@
|
|||||||
|
---
|
||||||
|
# Copyright (c) Ansible Project
|
||||||
|
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
dependencies:
|
||||||
|
- setup_docker_cli_compose
|
||||||
|
# The Python dependencies are needed for the other modules
|
||||||
|
- setup_docker_python_deps
|
||||||
|
- setup_remote_tmp_dir
|
||||||
@ -0,0 +1,52 @@
|
|||||||
|
---
|
||||||
|
# Copyright (c) Ansible Project
|
||||||
|
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
####################################################################
|
||||||
|
# WARNING: These are designed specifically for Ansible tests #
|
||||||
|
# and should not be used as examples of how to write Ansible roles #
|
||||||
|
####################################################################
|
||||||
|
|
||||||
|
# Create random name prefix (for services, ...)
|
||||||
|
- name: Create random container name prefix
|
||||||
|
set_fact:
|
||||||
|
name_prefix: "{{ 'ansible-docker-test-%0x' % ((2**32) | random) }}"
|
||||||
|
cnames: []
|
||||||
|
dnetworks: []
|
||||||
|
|
||||||
|
- debug:
|
||||||
|
msg: "Using name prefix {{ name_prefix }}"
|
||||||
|
|
||||||
|
- name: Show images
|
||||||
|
command: docker images --all --digests
|
||||||
|
|
||||||
|
# Run the tests
|
||||||
|
- block:
|
||||||
|
- name: Show docker compose --help output
|
||||||
|
command: docker compose --help
|
||||||
|
|
||||||
|
- include_tasks: run-test.yml
|
||||||
|
with_fileglob:
|
||||||
|
- "tests/*.yml"
|
||||||
|
loop_control:
|
||||||
|
loop_var: test_name
|
||||||
|
|
||||||
|
always:
|
||||||
|
- name: "Make sure all containers are removed"
|
||||||
|
docker_container:
|
||||||
|
name: "{{ item }}"
|
||||||
|
state: absent
|
||||||
|
force_kill: true
|
||||||
|
with_items: "{{ cnames }}"
|
||||||
|
diff: false
|
||||||
|
|
||||||
|
- name: "Make sure all networks are removed"
|
||||||
|
docker_network:
|
||||||
|
name: "{{ item }}"
|
||||||
|
state: absent
|
||||||
|
force: true
|
||||||
|
with_items: "{{ dnetworks }}"
|
||||||
|
diff: false
|
||||||
|
|
||||||
|
when: docker_has_compose and docker_compose_version is version('2.18.0', '>=')
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
# Copyright (c) Ansible Project
|
||||||
|
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
- name: "Loading tasks from {{ test_name }}"
|
||||||
|
include_tasks: "{{ test_name }}"
|
||||||
@ -0,0 +1,114 @@
|
|||||||
|
---
|
||||||
|
# Copyright (c) Ansible Project
|
||||||
|
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
- vars:
|
||||||
|
bname: "{{ name_prefix }}-build"
|
||||||
|
cname: "{{ name_prefix }}-cont"
|
||||||
|
non_existing_image: does-not-exist:latest
|
||||||
|
dockerfile_path: test-dockerfile
|
||||||
|
base_image: hello-world:latest
|
||||||
|
project_src: "{{ remote_tmp_dir }}/{{ bname }}"
|
||||||
|
test_service_non_existing: |
|
||||||
|
version: '3'
|
||||||
|
services:
|
||||||
|
{{ cname }}:
|
||||||
|
image: {{ non_existing_image }}
|
||||||
|
build:
|
||||||
|
dockerfile: Dockerfile-does-not-exist
|
||||||
|
test_service_simple: |
|
||||||
|
version: '3'
|
||||||
|
services:
|
||||||
|
{{ cname }}:
|
||||||
|
image: {{ docker_test_image_simple_1 }}
|
||||||
|
build:
|
||||||
|
dockerfile: {{ dockerfile_path }}
|
||||||
|
command: 10m
|
||||||
|
stop_grace_period: 1s
|
||||||
|
test_service_simple_dockerfile: |
|
||||||
|
FROM {{ base_image }}
|
||||||
|
|
||||||
|
block:
|
||||||
|
- name: Registering container name
|
||||||
|
set_fact:
|
||||||
|
cnames: "{{ cnames + [bname ~ '-' ~ cname ~ '-1'] + [ base_image ]}}"
|
||||||
|
dnetworks: "{{ dnetworks + [bname ~ '_default'] }}"
|
||||||
|
|
||||||
|
- name: Create project directory
|
||||||
|
file:
|
||||||
|
path: '{{ project_src }}'
|
||||||
|
state: directory
|
||||||
|
|
||||||
|
- name: Make sure images are not around
|
||||||
|
docker_image_remove:
|
||||||
|
name: '{{ item }}'
|
||||||
|
loop:
|
||||||
|
- '{{ base_image }}'
|
||||||
|
- '{{ non_existing_image }}'
|
||||||
|
- '{{ docker_test_image_simple_1 }}'
|
||||||
|
|
||||||
|
####################################################################
|
||||||
|
## Image with missing dockerfile ###################################
|
||||||
|
####################################################################
|
||||||
|
|
||||||
|
- name: Template project file with non-existing image
|
||||||
|
copy:
|
||||||
|
dest: '{{ project_src }}/docker-compose.yml'
|
||||||
|
content: '{{ test_service_non_existing }}'
|
||||||
|
|
||||||
|
- name: Build (check)
|
||||||
|
docker_compose_v2_build:
|
||||||
|
project_src: '{{ project_src }}'
|
||||||
|
check_mode: true
|
||||||
|
register: build_1_check
|
||||||
|
ignore_errors: true
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
docker_compose_v2_build:
|
||||||
|
project_src: '{{ project_src }}'
|
||||||
|
register: build_1
|
||||||
|
ignore_errors: true
|
||||||
|
|
||||||
|
- assert:
|
||||||
|
that:
|
||||||
|
- build_1_check is failed or build_1_check is changed
|
||||||
|
- build_1_check is changed or build_1_check.msg.startswith('Error when processing ')
|
||||||
|
- build_1_check.warnings | default([]) | select('regex', 'Cannot parse event from ') | length == 0
|
||||||
|
- build_1 is failed
|
||||||
|
- build_1.msg.startswith('Error when processing ')
|
||||||
|
- build_1.warnings | default([]) | select('regex', 'Cannot parse event from ') | length == 0
|
||||||
|
|
||||||
|
####################################################################
|
||||||
|
## Regular image ###################################################
|
||||||
|
####################################################################
|
||||||
|
|
||||||
|
- name: Template project file with simple dockerfile
|
||||||
|
copy:
|
||||||
|
dest: '{{ project_src }}/docker-compose.yml'
|
||||||
|
content: '{{ test_service_simple }}'
|
||||||
|
|
||||||
|
- name: Template dockerfile
|
||||||
|
copy:
|
||||||
|
dest: '{{ project_src }}/{{ dockerfile_path }}'
|
||||||
|
content: '{{ test_service_simple_dockerfile }}'
|
||||||
|
|
||||||
|
- name: Build (check)
|
||||||
|
docker_compose_v2_build:
|
||||||
|
project_src: '{{ project_src }}'
|
||||||
|
check_mode: true
|
||||||
|
register: build_1_check
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
docker_compose_v2_build:
|
||||||
|
project_src: '{{ project_src }}'
|
||||||
|
register: build_1
|
||||||
|
|
||||||
|
- assert:
|
||||||
|
that:
|
||||||
|
- build_1_check is changed
|
||||||
|
- (build_1_check.actions | selectattr('status', 'eq', 'Building') | first) is truthy
|
||||||
|
- build_1_check.warnings | default([]) | select('regex', 'Cannot parse event from ') | length == 0
|
||||||
|
- build_1 is changed
|
||||||
|
- (build_1.actions | selectattr('status', 'eq', 'Building') | first) is truthy
|
||||||
|
- build_1.warnings | default([]) | select('regex', 'Cannot parse event from ') | length == 0
|
||||||
Loading…
Reference in New Issue
Block a user