Improve CI (#198)

* Use remote temp path, replace remote lookups.

* Copy local files.

* Change docker resource name prefix from ansible-test to ansible-docker-test to avoid collision with ansible-test's containers.

* Fix typos.

* We don't neceessarily have a TTY.

* Use hopefully less collision-likely subnet.

* More collision avoidance.

* More changes.
This commit is contained in:
Felix Fontein 2021-09-08 09:43:35 +02:00 committed by GitHub
parent 451bc0e94e
commit 5a3ce51049
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
42 changed files with 190 additions and 139 deletions

View File

@ -60,7 +60,7 @@ EOF
echo "Run tests" echo "Run tests"
set -x set -x
docker run \ docker run \
-it \ -i \
--rm \ --rm \
--privileged \ --privileged \
--pid host \ --pid host \

View File

@ -1,3 +1,4 @@
--- ---
dependencies: dependencies:
- setup_docker_compose - setup_docker_compose
- setup_remote_tmp_dir

View File

@ -7,7 +7,7 @@
# Create random name prefix (for containers, networks, ...) # Create random name prefix (for containers, networks, ...)
- name: Create random container name prefix - name: Create random container name prefix
set_fact: set_fact:
cname_prefix: "{{ 'ansible-test-%0x' % ((2**32) | random) }}" cname_prefix: "{{ 'ansible-docker-test-%0x' % ((2**32) | random) }}"
cnames: [] cnames: []
dnetworks: [] dnetworks: []

View File

@ -105,10 +105,10 @@
- block: - block:
- name: Define service and files - name: Define service and files
set_fact: set_fact:
compose_file: "{{ output_dir }}/docker-compose.yml" compose_file: "{{ remote_tmp_dir }}/docker-compose.yml"
env_file: "{{ output_dir }}/.env" env_file: "{{ remote_tmp_dir }}/.env"
env_sleep_cmd: sleep 10m env_sleep_cmd: sleep 10m
new_env_file: "{{ output_dir }}/new.env" new_env_file: "{{ remote_tmp_dir }}/new.env"
new_env_sleep_cmd: sleep 20m new_env_sleep_cmd: sleep 20m
test_service: | test_service: |
version: '2' version: '2'
@ -145,7 +145,7 @@
- name: Env_file - name: Env_file
docker_compose: docker_compose:
project_name: "{{ pname }}" project_name: "{{ pname }}"
project_src: "{{ output_dir }}" project_src: "{{ remote_tmp_dir }}"
env_file: "{{ test_case.env_file | default(omit) }}" env_file: "{{ test_case.env_file | default(omit) }}"
register: env_file_outputs register: env_file_outputs
loop: "{{ test_cases }}" loop: "{{ test_cases }}"

View File

@ -7,7 +7,7 @@
# Create random name prefix (for containers, networks, ...) # Create random name prefix (for containers, networks, ...)
- name: Create random container name prefix - name: Create random container name prefix
set_fact: set_fact:
cname_prefix: "{{ 'ansible-test-%0x' % ((2**32) | random) }}" cname_prefix: "{{ 'ansible-docker-test-%0x' % ((2**32) | random) }}"
cnames: [] cnames: []
dnetworks: [] dnetworks: []

View File

@ -1607,13 +1607,18 @@
## env_file ######################################################### ## env_file #########################################################
#################################################################### ####################################################################
- name: Copy env-file
copy:
src: env-file
dest: "{{ remote_tmp_dir }}/env-file"
- name: env_file - name: env_file
docker_container: docker_container:
image: "{{ docker_test_image_alpine }}" image: "{{ docker_test_image_alpine }}"
command: '/bin/sh -c "sleep 10m"' command: '/bin/sh -c "sleep 10m"'
name: "{{ cname }}" name: "{{ cname }}"
state: started state: started
env_file: "{{ role_path }}/files/env-file" env_file: "{{ remote_tmp_dir }}/env-file"
register: env_file_1 register: env_file_1
- name: env_file (idempotency) - name: env_file (idempotency)
@ -1622,7 +1627,7 @@
command: '/bin/sh -c "sleep 10m"' command: '/bin/sh -c "sleep 10m"'
name: "{{ cname }}" name: "{{ cname }}"
state: started state: started
env_file: "{{ role_path }}/files/env-file" env_file: "{{ remote_tmp_dir }}/env-file"
register: env_file_2 register: env_file_2
- name: cleanup - name: cleanup

View File

@ -7,7 +7,7 @@
- block: - block:
- name: Create random container name - name: Create random container name
set_fact: set_fact:
cname: "{{ 'ansible-test-%0x' % ((2**32) | random) }}" cname: "{{ 'ansible-docker-test-%0x' % ((2**32) | random) }}"
- name: Make sure container is not there - name: Make sure container is not there
docker_container: docker_container:

View File

@ -7,7 +7,7 @@
- block: - block:
- name: Create random container name - name: Create random container name
set_fact: set_fact:
cname: "{{ 'ansible-test-%0x' % ((2**32) | random) }}" cname: "{{ 'ansible-docker-test-%0x' % ((2**32) | random) }}"
- name: Make sure container is not there - name: Make sure container is not there
docker_container: docker_container:

View File

@ -1,8 +1,8 @@
--- ---
- name: Create random container/volume name - name: Create random container/volume name
set_fact: set_fact:
cname: "{{ 'ansible-test-%0x' % ((2**32) | random) }}" cname: "{{ 'ansible-docker-test-%0x' % ((2**32) | random) }}"
vname: "{{ 'ansible-test-%0x' % ((2**32) | random) }}" vname: "{{ 'ansible-docker-test-%0x' % ((2**32) | random) }}"
- debug: - debug:
msg: "Using container name '{{ cname }}' and volume name '{{ vname }}'" msg: "Using container name '{{ cname }}' and volume name '{{ vname }}'"

View File

@ -1,3 +1,4 @@
--- ---
dependencies: dependencies:
- setup_docker_registry - setup_docker_registry
- setup_remote_tmp_dir

View File

@ -1,7 +1,7 @@
--- ---
- name: Create random name prefix - name: Create random name prefix
set_fact: set_fact:
name_prefix: "{{ 'ansible-test-%0x' % ((2**32) | random) }}" name_prefix: "{{ 'ansible-docker-test-%0x' % ((2**32) | random) }}"
- name: Create image and container list - name: Create image and container list
set_fact: set_fact:
inames: [] inames: []
@ -12,13 +12,13 @@
- name: Create files directory - name: Create files directory
file: file:
path: '{{ output_dir }}/files' path: '{{ remote_tmp_dir }}/files'
state: directory state: directory
- name: Template files - name: Template files
template: template:
src: '{{ item }}' src: '{{ item }}'
dest: '{{ output_dir }}/files/{{ item }}' dest: '{{ remote_tmp_dir }}/files/{{ item }}'
loop: loop:
- Dockerfile - Dockerfile
- EtcHostsDockerfile - EtcHostsDockerfile

View File

@ -118,7 +118,7 @@
source: build source: build
name: "{{ present_1.image.Id }}" name: "{{ present_1.image.Id }}"
build: build:
path: "{{ output_dir }}/files" path: "{{ remote_tmp_dir }}/files"
force_source: true force_source: true
register: fail_4 register: fail_4
ignore_errors: yes ignore_errors: yes

View File

@ -191,7 +191,7 @@
docker_image: docker_image:
name: "{{ iname }}" name: "{{ iname }}"
build: build:
path: "{{ output_dir }}/files" path: "{{ remote_tmp_dir }}/files"
pull: no pull: no
repository: "{{ test_image_base }}" repository: "{{ test_image_base }}"
source: build source: build

View File

@ -22,7 +22,7 @@
docker_image: docker_image:
name: "{{ iname }}" name: "{{ iname }}"
build: build:
path: "{{ output_dir }}/files" path: "{{ remote_tmp_dir }}/files"
args: args:
TEST1: val1 TEST1: val1
TEST2: val2 TEST2: val2
@ -36,7 +36,7 @@
docker_image: docker_image:
name: "{{ iname }}" name: "{{ iname }}"
build: build:
path: "{{ output_dir }}/files" path: "{{ remote_tmp_dir }}/files"
args: args:
TEST1: val1 TEST1: val1
TEST2: val2 TEST2: val2
@ -72,7 +72,7 @@
docker_image: docker_image:
name: "{{ iname }}" name: "{{ iname }}"
build: build:
path: "{{ output_dir }}/files" path: "{{ remote_tmp_dir }}/files"
container_limits: container_limits:
memory: 4000 memory: 4000
pull: no pull: no
@ -84,7 +84,7 @@
docker_image: docker_image:
name: "{{ iname }}" name: "{{ iname }}"
build: build:
path: "{{ output_dir }}/files" path: "{{ remote_tmp_dir }}/files"
container_limits: container_limits:
memory: 7000000 memory: 7000000
memswap: 8000000 memswap: 8000000
@ -117,7 +117,7 @@
docker_image: docker_image:
name: "{{ iname }}" name: "{{ iname }}"
build: build:
path: "{{ output_dir }}/files" path: "{{ remote_tmp_dir }}/files"
dockerfile: "MyDockerfile" dockerfile: "MyDockerfile"
pull: no pull: no
source: build source: build
@ -149,7 +149,7 @@
docker_image: docker_image:
name: "{{ iname }}" name: "{{ iname }}"
build: build:
path: "{{ output_dir }}/files" path: "{{ remote_tmp_dir }}/files"
platform: linux platform: linux
pull: no pull: no
source: build source: build
@ -160,7 +160,7 @@
docker_image: docker_image:
name: "{{ iname }}" name: "{{ iname }}"
build: build:
path: "{{ output_dir }}/files" path: "{{ remote_tmp_dir }}/files"
platform: linux platform: linux
pull: no pull: no
source: build source: build
@ -193,7 +193,7 @@
docker_image: docker_image:
name: "{{ iname }}" name: "{{ iname }}"
build: build:
path: "{{ output_dir }}/files" path: "{{ remote_tmp_dir }}/files"
pull: no pull: no
source: build source: build
@ -201,7 +201,7 @@
docker_image: docker_image:
name: "{{ iname }}" name: "{{ iname }}"
build: build:
path: "{{ output_dir }}/files" path: "{{ remote_tmp_dir }}/files"
dockerfile: "MyDockerfile" dockerfile: "MyDockerfile"
pull: no pull: no
source: build source: build
@ -212,7 +212,7 @@
docker_image: docker_image:
name: "{{ iname }}" name: "{{ iname }}"
build: build:
path: "{{ output_dir }}/files" path: "{{ remote_tmp_dir }}/files"
dockerfile: "MyDockerfile" dockerfile: "MyDockerfile"
pull: no pull: no
source: build source: build
@ -237,20 +237,20 @@
- name: Archive image - name: Archive image
docker_image: docker_image:
name: "{{ docker_test_image_hello_world }}" name: "{{ docker_test_image_hello_world }}"
archive_path: "{{ output_dir }}/image.tar" archive_path: "{{ remote_tmp_dir }}/image.tar"
source: pull source: pull
register: archive_image register: archive_image
- name: Archive image by ID - name: Archive image by ID
docker_image: docker_image:
name: "{{ archive_image.image.Id }}" name: "{{ archive_image.image.Id }}"
archive_path: "{{ output_dir }}/image_id.tar" archive_path: "{{ remote_tmp_dir }}/image_id.tar"
source: local source: local
register: archive_image_id register: archive_image_id
- name: Create invalid archive - name: Create invalid archive
copy: copy:
dest: "{{ output_dir }}/image-invalid.tar" dest: "{{ remote_tmp_dir }}/image-invalid.tar"
content: "this is not a valid image" content: "this is not a valid image"
- name: remove image - name: remove image
@ -262,21 +262,21 @@
- name: load image (changed) - name: load image (changed)
docker_image: docker_image:
name: "{{ docker_test_image_hello_world }}" name: "{{ docker_test_image_hello_world }}"
load_path: "{{ output_dir }}/image.tar" load_path: "{{ remote_tmp_dir }}/image.tar"
source: load source: load
register: load_image register: load_image
- name: load image (idempotency) - name: load image (idempotency)
docker_image: docker_image:
name: "{{ docker_test_image_hello_world }}" name: "{{ docker_test_image_hello_world }}"
load_path: "{{ output_dir }}/image.tar" load_path: "{{ remote_tmp_dir }}/image.tar"
source: load source: load
register: load_image_1 register: load_image_1
- name: load image (wrong name) - name: load image (wrong name)
docker_image: docker_image:
name: foo:bar name: foo:bar
load_path: "{{ output_dir }}/image.tar" load_path: "{{ remote_tmp_dir }}/image.tar"
source: load source: load
register: load_image_2 register: load_image_2
ignore_errors: true ignore_errors: true
@ -284,7 +284,7 @@
- name: load image (invalid image) - name: load image (invalid image)
docker_image: docker_image:
name: foo:bar name: foo:bar
load_path: "{{ output_dir }}/image-invalid.tar" load_path: "{{ remote_tmp_dir }}/image-invalid.tar"
source: load source: load
register: load_image_3 register: load_image_3
ignore_errors: true ignore_errors: true
@ -292,7 +292,7 @@
- name: load image (invalid image, old API version) - name: load image (invalid image, old API version)
docker_image: docker_image:
name: foo:bar name: foo:bar
load_path: "{{ output_dir }}/image-invalid.tar" load_path: "{{ remote_tmp_dir }}/image-invalid.tar"
source: load source: load
api_version: "1.22" api_version: "1.22"
register: load_image_4 register: load_image_4
@ -300,7 +300,7 @@
- name: load image (ID, idempotency) - name: load image (ID, idempotency)
docker_image: docker_image:
name: "{{ archive_image.image.Id }}" name: "{{ archive_image.image.Id }}"
load_path: "{{ output_dir }}/image_id.tar" load_path: "{{ remote_tmp_dir }}/image_id.tar"
source: load source: load
register: load_image_5 register: load_image_5
@ -326,7 +326,7 @@
docker_image: docker_image:
name: "{{ iname }}" name: "{{ iname }}"
build: build:
path: "{{ output_dir }}/files" path: "{{ remote_tmp_dir }}/files"
pull: no pull: no
source: build source: build
register: path_1 register: path_1
@ -335,7 +335,7 @@
docker_image: docker_image:
name: "{{ iname }}" name: "{{ iname }}"
build: build:
path: "{{ output_dir }}/files" path: "{{ remote_tmp_dir }}/files"
pull: no pull: no
source: build source: build
register: path_2 register: path_2
@ -359,7 +359,7 @@
docker_image: docker_image:
name: "{{ iname }}" name: "{{ iname }}"
build: build:
path: "{{ output_dir }}/files" path: "{{ remote_tmp_dir }}/files"
dockerfile: "StagedDockerfile" dockerfile: "StagedDockerfile"
target: first target: first
pull: no pull: no
@ -385,7 +385,7 @@
docker_image: docker_image:
name: "{{ iname }}" name: "{{ iname }}"
build: build:
path: "{{ output_dir }}/files" path: "{{ remote_tmp_dir }}/files"
dockerfile: "EtcHostsDockerfile" dockerfile: "EtcHostsDockerfile"
pull: no pull: no
etc_hosts: etc_hosts:

View File

@ -1,3 +1,4 @@
--- ---
dependencies: dependencies:
- setup_docker - setup_docker
- setup_remote_tmp_dir

View File

@ -1,7 +1,7 @@
--- ---
- name: Create random name prefix - name: Create random name prefix
set_fact: set_fact:
name_prefix: "{{ 'ansible-test-%0x' % ((2**32) | random) }}" name_prefix: "{{ 'ansible-docker-test-%0x' % ((2**32) | random) }}"
- name: Create image and container list - name: Create image and container list
set_fact: set_fact:
inames: [] inames: []

View File

@ -18,7 +18,7 @@
all_images: "{{ image_names + (images.results | map(attribute='image') | map(attribute='Id') | list) }}" all_images: "{{ image_names + (images.results | map(attribute='image') | map(attribute='Id') | list) }}"
- name: Create archives - name: Create archives
command: docker save {{ item.images | join(' ') }} -o {{ output_dir }}/{{ item.file }} command: docker save {{ item.images | join(' ') }} -o {{ remote_tmp_dir }}/{{ item.file }}
loop: loop:
- file: archive-1.tar - file: archive-1.tar
images: "{{ image_names }}" images: "{{ image_names }}"
@ -72,7 +72,7 @@
- name: Load all images (IDs) - name: Load all images (IDs)
docker_image_load: docker_image_load:
path: "{{ output_dir }}/archive-2.tar" path: "{{ remote_tmp_dir }}/archive-2.tar"
register: result register: result
- name: Print loaded image names - name: Print loaded image names
@ -87,7 +87,7 @@
- name: Load all images (IDs, should be same result) - name: Load all images (IDs, should be same result)
docker_image_load: docker_image_load:
path: "{{ output_dir }}/archive-2.tar" path: "{{ remote_tmp_dir }}/archive-2.tar"
register: result_2 register: result_2
- name: Print loaded image names - name: Print loaded image names
@ -110,7 +110,7 @@
- name: Load all images (mixed images and IDs) - name: Load all images (mixed images and IDs)
docker_image_load: docker_image_load:
path: "{{ output_dir }}/archive-3.tar" path: "{{ remote_tmp_dir }}/archive-3.tar"
register: result register: result
- name: Print loading log - name: Print loading log
@ -140,7 +140,7 @@
- name: Load all images (same image twice) - name: Load all images (same image twice)
docker_image_load: docker_image_load:
path: "{{ output_dir }}/archive-4.tar" path: "{{ remote_tmp_dir }}/archive-4.tar"
register: result register: result
- name: Print loaded image names - name: Print loaded image names
@ -165,7 +165,7 @@
- name: Load all images (single image by ID) - name: Load all images (single image by ID)
docker_image_load: docker_image_load:
path: "{{ output_dir }}/archive-5.tar" path: "{{ remote_tmp_dir }}/archive-5.tar"
register: result register: result
- name: Print loaded image names - name: Print loaded image names
@ -200,7 +200,7 @@
- name: Load all images (names) - name: Load all images (names)
docker_image_load: docker_image_load:
path: "{{ output_dir }}/archive-1.tar" path: "{{ remote_tmp_dir }}/archive-1.tar"
register: result register: result
- name: Print loaded image names - name: Print loaded image names

View File

@ -6,7 +6,7 @@
- name: Create random name prefix - name: Create random name prefix
set_fact: set_fact:
name_prefix: "{{ 'ansible-test-%0x' % ((2**32) | random) }}" name_prefix: "{{ 'ansible-docker-test-%0x' % ((2**32) | random) }}"
cnames: [] cnames: []
dnetworks: [] dnetworks: []

View File

@ -17,12 +17,12 @@
docker_network: docker_network:
name: "{{ nname_ipam_1 }}" name: "{{ nname_ipam_1 }}"
ipam_config: ipam_config:
- subnet: 172.23.27.0/24 - subnet: 172.25.120.0/24
gateway: 172.23.27.2 gateway: 172.25.120.2
iprange: 172.23.27.0/26 iprange: 172.25.120.0/26
aux_addresses: aux_addresses:
host1: 172.23.27.3 host1: 172.25.120.3
host2: 172.23.27.4 host2: 172.25.120.4
register: network register: network
- assert: - assert:
@ -33,12 +33,12 @@
docker_network: docker_network:
name: "{{ nname_ipam_1 }}" name: "{{ nname_ipam_1 }}"
ipam_config: ipam_config:
- subnet: 172.23.27.0/24 - subnet: 172.25.120.0/24
gateway: 172.23.27.2 gateway: 172.25.120.2
iprange: 172.23.27.0/26 iprange: 172.25.120.0/26
aux_addresses: aux_addresses:
host1: 172.23.27.3 host1: 172.25.120.3
host2: 172.23.27.4 host2: 172.25.120.4
register: network register: network
- assert: - assert:
@ -49,11 +49,11 @@
docker_network: docker_network:
name: "{{ nname_ipam_1 }}" name: "{{ nname_ipam_1 }}"
ipam_config: ipam_config:
- subnet: 172.23.28.0/24 - subnet: 172.25.121.0/24
gateway: 172.23.28.2 gateway: 172.25.121.2
iprange: 172.23.28.0/26 iprange: 172.25.121.0/26
aux_addresses: aux_addresses:
host1: 172.23.28.3 host1: 172.25.121.3
register: network register: network
diff: yes diff: yes
@ -70,7 +70,7 @@
docker_network: docker_network:
name: "{{ nname_ipam_1 }}" name: "{{ nname_ipam_1 }}"
ipam_config: ipam_config:
- subnet: 172.23.28.0/24 - subnet: 172.25.121.0/24
register: network register: network
- assert: - assert:
@ -151,7 +151,7 @@
name: "{{ nname_ipam_3 }}" name: "{{ nname_ipam_3 }}"
enable_ipv6: yes enable_ipv6: yes
ipam_config: ipam_config:
- subnet: 172.24.27.0/24 - subnet: 172.26.120.0/24
- subnet: fdd1:ac8c:0557:7ce2::/64 - subnet: fdd1:ac8c:0557:7ce2::/64
register: network register: network
@ -165,7 +165,7 @@
enable_ipv6: yes enable_ipv6: yes
ipam_config: ipam_config:
- subnet: fdd1:ac8c:0557:7ce2::/64 - subnet: fdd1:ac8c:0557:7ce2::/64
- subnet: 172.24.27.0/24 - subnet: 172.26.120.0/24
register: network register: network
- assert: - assert:
@ -177,7 +177,7 @@
name: "{{ nname_ipam_3 }}" name: "{{ nname_ipam_3 }}"
enable_ipv6: no enable_ipv6: no
ipam_config: ipam_config:
- subnet: 172.24.27.0/24 - subnet: 172.26.120.0/24
register: network register: network
diff: yes diff: yes
@ -203,8 +203,8 @@
driver_options: driver_options:
parent: "{{ ansible_default_ipv4.alias }}" parent: "{{ ansible_default_ipv4.alias }}"
ipam_config: ipam_config:
- subnet: 172.24.27.0/24 - subnet: 172.26.120.0/24
- subnet: 172.24.28.0/24 - subnet: 172.26.121.0/24
register: network register: network
- assert: - assert:
@ -218,8 +218,8 @@
driver_options: driver_options:
parent: "{{ ansible_default_ipv4.alias }}" parent: "{{ ansible_default_ipv4.alias }}"
ipam_config: ipam_config:
- subnet: 172.24.28.0/24 - subnet: 172.26.121.0/24
- subnet: 172.24.27.0/24 - subnet: 172.26.120.0/24
register: network register: network
- assert: - assert:
@ -233,8 +233,8 @@
driver_options: driver_options:
parent: "{{ ansible_default_ipv4.alias }}" parent: "{{ ansible_default_ipv4.alias }}"
ipam_config: ipam_config:
- subnet: 172.24.27.0/24 - subnet: 172.26.120.0/24
- subnet: 172.24.29.0/24 - subnet: 172.26.122.0/24
register: network register: network
diff: yes diff: yes
@ -250,7 +250,7 @@
driver_options: driver_options:
parent: "{{ ansible_default_ipv4.alias }}" parent: "{{ ansible_default_ipv4.alias }}"
ipam_config: ipam_config:
- subnet: 172.24.29.0/24 - subnet: 172.26.122.0/24
register: network register: network
- assert: - assert:

View File

@ -7,7 +7,7 @@
- block: - block:
- name: Create random network name - name: Create random network name
set_fact: set_fact:
nname: "{{ 'ansible-test-%0x' % ((2**32) | random) }}" nname: "{{ 'ansible-docker-test-%0x' % ((2**32) | random) }}"
- name: Make sure network is not there - name: Make sure network is not there
docker_network: docker_network:

View File

@ -1,3 +1,4 @@
--- ---
dependencies: dependencies:
- setup_docker - setup_docker
- setup_remote_tmp_dir

View File

@ -48,7 +48,7 @@
- name: Template compose files - name: Template compose files
template: template:
src: "{{item}}" src: "{{item}}"
dest: "{{output_dir}}/" dest: "{{remote_tmp_dir}}/"
with_items: with_items:
- stack_compose_base.yml - stack_compose_base.yml
- stack_compose_overrides.yml - stack_compose_overrides.yml
@ -59,7 +59,7 @@
state: present state: present
name: test_stack name: test_stack
compose: compose:
- "{{output_dir}}/stack_compose_base.yml" - "{{remote_tmp_dir}}/stack_compose_base.yml"
- name: assert test_stack changed on stack creation with compose file - name: assert test_stack changed on stack creation with compose file
assert: assert:

View File

@ -1,3 +1,4 @@
--- ---
dependencies: dependencies:
- setup_docker - setup_docker
- setup_remote_tmp_dir

View File

@ -34,7 +34,7 @@
- name: Template compose files - name: Template compose files
template: template:
src: "{{ item }}" src: "{{ item }}"
dest: "{{ output_dir }}/" dest: "{{ remote_tmp_dir }}/"
with_items: with_items:
- stack_compose_base.yml - stack_compose_base.yml
- stack_compose_overrides.yml - stack_compose_overrides.yml
@ -49,7 +49,7 @@
state: present state: present
name: test_stack name: test_stack
compose: compose:
- "{{ output_dir }}/stack_compose_base.yml" - "{{ remote_tmp_dir }}/stack_compose_base.yml"
- name: Assert test_stack changed on stack creation with compose file - name: Assert test_stack changed on stack creation with compose file
assert: assert:

View File

@ -1,3 +1,4 @@
--- ---
dependencies: dependencies:
- setup_docker - setup_docker
- setup_remote_tmp_dir

View File

@ -34,7 +34,7 @@
- name: Template compose files - name: Template compose files
template: template:
src: "{{ item }}" src: "{{ item }}"
dest: "{{ output_dir }}/" dest: "{{ remote_tmp_dir }}/"
with_items: with_items:
- stack_compose_base.yml - stack_compose_base.yml
- stack_compose_overrides.yml - stack_compose_overrides.yml
@ -49,7 +49,7 @@
state: present state: present
name: test_stack name: test_stack
compose: compose:
- "{{ output_dir }}/stack_compose_base.yml" - "{{ remote_tmp_dir }}/stack_compose_base.yml"
- name: Assert test_stack changed on stack creation with compose file - name: Assert test_stack changed on stack creation with compose file
assert: assert:

View File

@ -2,3 +2,4 @@
dependencies: dependencies:
- setup_docker - setup_docker
- setup_openssl - setup_openssl
- setup_remote_tmp_dir

View File

@ -10,7 +10,7 @@
loop_control: loop_control:
loop_var: key loop_var: key
community.crypto.openssl_privatekey: community.crypto.openssl_privatekey:
path: '{{ output_dir }}/ansible_{{ key }}.key' path: '{{ remote_tmp_dir }}/ansible_{{ key }}.key'
size: 2048 size: 2048
mode: '0666' mode: '0666'
- name: Generate CSR - name: Generate CSR
@ -20,8 +20,8 @@
loop_control: loop_control:
loop_var: key loop_var: key
community.crypto.openssl_csr: community.crypto.openssl_csr:
path: '{{ output_dir }}/ansible_{{ key }}.csr' path: '{{ remote_tmp_dir }}/ansible_{{ key }}.csr'
privatekey_path: '{{ output_dir }}/ansible_{{ key }}.key' privatekey_path: '{{ remote_tmp_dir }}/ansible_{{ key }}.key'
basic_constraints: basic_constraints:
- CA:TRUE - CA:TRUE
key_usage: key_usage:
@ -33,16 +33,30 @@
loop_control: loop_control:
loop_var: key loop_var: key
community.crypto.openssl_certificate: community.crypto.openssl_certificate:
path: '{{ output_dir }}/ansible_{{ key }}.pem' path: '{{ remote_tmp_dir }}/ansible_{{ key }}.pem'
privatekey_path: '{{ output_dir }}/ansible_{{ key }}.key' privatekey_path: '{{ remote_tmp_dir }}/ansible_{{ key }}.key'
csr_path: '{{ output_dir }}/ansible_{{ key }}.csr' csr_path: '{{ remote_tmp_dir }}/ansible_{{ key }}.csr'
provider: selfsigned provider: selfsigned
- name: Load certificates
slurp:
src: '{{ remote_tmp_dir }}/{{ item }}'
loop:
- ansible_key1.pem
- ansible_key2.pem
register: ansible_certificates
- name: Load certificate keys
slurp:
src: '{{ remote_tmp_dir }}/{{ item }}'
loop:
- ansible_key1.key
- ansible_key2.key
register: ansible_keys
- name: signing_ca_cert and signing_ca_key (check mode) - name: signing_ca_cert and signing_ca_key (check mode)
docker_swarm: docker_swarm:
advertise_addr: '{{ansible_default_ipv4.address | default(''127.0.0.1'')}}' advertise_addr: '{{ansible_default_ipv4.address | default("127.0.0.1")}}'
state: present state: present
signing_ca_cert: '{{ lookup(''file'', output_dir ~ ''/ansible_key1.pem'') }}' signing_ca_cert: '{{ ansible_certificates.results[0].content | b64decode }}'
signing_ca_key: '{{ lookup(''file'', output_dir ~ ''/ansible_key1.key'') }}' signing_ca_key: '{{ ansible_keys.results[0].content | b64decode }}'
timeout: 120 timeout: 120
check_mode: true check_mode: true
diff: true diff: true
@ -50,18 +64,18 @@
ignore_errors: true ignore_errors: true
- name: signing_ca_cert and signing_ca_key - name: signing_ca_cert and signing_ca_key
docker_swarm: docker_swarm:
advertise_addr: '{{ansible_default_ipv4.address | default(''127.0.0.1'')}}' advertise_addr: '{{ansible_default_ipv4.address | default("127.0.0.1")}}'
state: present state: present
signing_ca_cert: '{{ lookup(''file'', output_dir ~ ''/ansible_key1.pem'') }}' signing_ca_cert: '{{ ansible_certificates.results[0].content | b64decode }}'
signing_ca_key: '{{ lookup(''file'', output_dir ~ ''/ansible_key1.key'') }}' signing_ca_key: '{{ ansible_keys.results[0].content | b64decode }}'
timeout: 120 timeout: 120
diff: true diff: true
register: output_2 register: output_2
ignore_errors: true ignore_errors: true
- name: Private key - name: Private key
debug: msg="{{ lookup('file', output_dir ~ '/ansible_key1.key') }}" debug: msg="{{ ansible_keys.results[0].content | b64decode }}"
- name: Cert - name: Cert
debug: msg="{{ lookup('file', output_dir ~ '/ansible_key1.pem') }}" debug: msg="{{ ansible_certificates.results[0].content | b64decode }}"
- docker_swarm_info: null - docker_swarm_info: null
register: output register: output
ignore_errors: true ignore_errors: true
@ -69,8 +83,8 @@
- name: signing_ca_cert and signing_ca_key (change, check mode) - name: signing_ca_cert and signing_ca_key (change, check mode)
docker_swarm: docker_swarm:
state: present state: present
signing_ca_cert: '{{ lookup(''file'', output_dir ~ ''/ansible_key2.pem'') }}' signing_ca_cert: '{{ ansible_certificates.results[1].content | b64decode }}'
signing_ca_key: '{{ lookup(''file'', output_dir ~ ''/ansible_key2.key'') }}' signing_ca_key: '{{ ansible_keys.results[1].content | b64decode }}'
timeout: 120 timeout: 120
check_mode: true check_mode: true
diff: true diff: true
@ -79,8 +93,8 @@
- name: signing_ca_cert and signing_ca_key (change) - name: signing_ca_cert and signing_ca_key (change)
docker_swarm: docker_swarm:
state: present state: present
signing_ca_cert: '{{ lookup(''file'', output_dir ~ ''/ansible_key2.pem'') }}' signing_ca_cert: '{{ ansible_certificates.results[1].content | b64decode }}'
signing_ca_key: '{{ lookup(''file'', output_dir ~ ''/ansible_key2.key'') }}' signing_ca_key: '{{ ansible_keys.results[1].content | b64decode }}'
timeout: 120 timeout: 120
diff: true diff: true
register: output_6 register: output_6
@ -109,6 +123,6 @@
that: that:
- output_1 is failed - output_1 is failed
- ('version is ' ~ docker_py_version ~ ' ') in output_1.msg - ('version is ' ~ docker_py_version ~ ' ') in output_1.msg
- '''Minimum version required is 2.6.0 '' in output_1.msg' - '"Minimum version required is 2.6.0 " in output_1.msg'
when: docker_py_version is version('2.6.0', '<') when: docker_py_version is version('2.6.0', '<')
- include_tasks: cleanup.yml - include_tasks: cleanup.yml

View File

@ -8,7 +8,7 @@
# Create random name prefix (for containers, networks, ...) # Create random name prefix (for containers, networks, ...)
- name: Create random name prefix - name: Create random name prefix
set_fact: set_fact:
name_prefix: "{{ 'ansible-test-%0x' % ((2**32) | random) }}" name_prefix: "{{ 'ansible-docker-test-%0x' % ((2**32) | random) }}"
service_names: [] service_names: []
network_names: [] network_names: []
config_names: [] config_names: []

View File

@ -672,13 +672,21 @@
## env_files ####################################################### ## env_files #######################################################
#################################################################### ####################################################################
- name: Copy env-files
copy:
src: "{{ item }}"
dest: "{{ remote_tmp_dir }}/{{ item }}"
loop:
- env-file-1
- env-file-2
- name: env_files - name: env_files
docker_swarm_service: docker_swarm_service:
name: "{{ service_name }}" name: "{{ service_name }}"
image: "{{ docker_test_image_alpine }}" image: "{{ docker_test_image_alpine }}"
resolve_image: no resolve_image: no
env_files: env_files:
- "{{ role_path }}/files/env-file-1" - "{{ remote_tmp_dir }}/env-file-1"
register: env_file_1 register: env_file_1
- name: env_files (idempotency) - name: env_files (idempotency)
@ -687,7 +695,7 @@
image: "{{ docker_test_image_alpine }}" image: "{{ docker_test_image_alpine }}"
resolve_image: no resolve_image: no
env_files: env_files:
- "{{ role_path }}/files/env-file-1" - "{{ remote_tmp_dir }}/env-file-1"
register: env_file_2 register: env_file_2
- name: env_files (more items) - name: env_files (more items)
@ -696,8 +704,8 @@
image: "{{ docker_test_image_alpine }}" image: "{{ docker_test_image_alpine }}"
resolve_image: no resolve_image: no
env_files: env_files:
- "{{ role_path }}/files/env-file-1" - "{{ remote_tmp_dir }}/env-file-1"
- "{{ role_path }}/files/env-file-2" - "{{ remote_tmp_dir }}/env-file-2"
register: env_file_3 register: env_file_3
- name: env_files (order) - name: env_files (order)
@ -706,8 +714,8 @@
image: "{{ docker_test_image_alpine }}" image: "{{ docker_test_image_alpine }}"
resolve_image: no resolve_image: no
env_files: env_files:
- "{{ role_path }}/files/env-file-2" - "{{ remote_tmp_dir }}/env-file-2"
- "{{ role_path }}/files/env-file-1" - "{{ remote_tmp_dir }}/env-file-1"
register: env_file_4 register: env_file_4
- name: env_files (multiple idempotency) - name: env_files (multiple idempotency)
@ -716,8 +724,8 @@
image: "{{ docker_test_image_alpine }}" image: "{{ docker_test_image_alpine }}"
resolve_image: no resolve_image: no
env_files: env_files:
- "{{ role_path }}/files/env-file-2" - "{{ remote_tmp_dir }}/env-file-2"
- "{{ role_path }}/files/env-file-1" - "{{ remote_tmp_dir }}/env-file-1"
register: env_file_5 register: env_file_5
- name: env_files (empty) - name: env_files (empty)

View File

@ -2,7 +2,7 @@
- name: Generate service base name - name: Generate service base name
set_fact: set_fact:
service_base_name: "{{ 'ansible-test-%0x' % ((2**32) | random) }}" service_base_name: "{{ 'ansible-docker-test-%0x' % ((2**32) | random) }}"
- name: Registering service names - name: Registering service names
set_fact: set_fact:

View File

@ -6,7 +6,7 @@
- name: Create random name prefix - name: Create random name prefix
set_fact: set_fact:
name_prefix: "{{ 'ansible-test-%0x' % ((2**32) | random) }}" name_prefix: "{{ 'ansible-docker-test-%0x' % ((2**32) | random) }}"
vnames: [] vnames: []
- debug: - debug:

View File

@ -7,7 +7,7 @@
- block: - block:
- name: Create random volume name - name: Create random volume name
set_fact: set_fact:
cname: "{{ 'ansible-test-%0x' % ((2**32) | random) }}" cname: "{{ 'ansible-docker-test-%0x' % ((2**32) | random) }}"
- name: Make sure volume is not there - name: Make sure volume is not there
docker_volume: docker_volume:

View File

@ -22,9 +22,17 @@
command: ls -lah ~/.ssh command: ls -lah ~/.ssh
ignore_errors: true ignore_errors: true
- name: Recover home directory on remote
command: echo $HOME
register: remote_home
- name: Print remote home directory
debug:
var: remote_home.stdout
- name: Create SSH config - name: Create SSH config
copy: copy:
dest: "{{ lookup('env', 'HOME') }}/.ssh/config" dest: "{{ remote_home.stdout }}/.ssh/config"
mode: '0600' mode: '0600'
content: | content: |
Host localhost Host localhost

View File

@ -9,8 +9,8 @@
state: absent state: absent
force_kill: yes force_kill: yes
loop: loop:
- ansible-test-docker-inventory-container-1 - ansible-docker-test-docker-inventory-container-1
- ansible-test-docker-inventory-container-2 - ansible-docker-test-docker-inventory-container-2
- name: remove docker pagkages - name: remove docker pagkages
action: "{{ ansible_facts.pkg_mgr }}" action: "{{ ansible_facts.pkg_mgr }}"

View File

@ -18,5 +18,5 @@
published_ports: published_ports:
- 22/tcp - 22/tcp
loop: loop:
- name: ansible-test-docker-inventory-container-1 - name: ansible-docker-test-docker-inventory-container-1
- name: ansible-test-docker-inventory-container-2 - name: ansible-docker-test-docker-inventory-container-2

View File

@ -19,7 +19,7 @@
- when: - when:
# When the integration tests are run inside a docker container, there # When the integration tests are run inside a docker container, there
# will be other containers. # will be other containers.
- inventory_hostname.startswith('ansible-test-docker-inventory-container-') - inventory_hostname.startswith('ansible-docker-test-docker-inventory-container-')
block: block:
- name: Run raw command - name: Run raw command

View File

@ -16,8 +16,8 @@
- groups.running | length >= 2 - groups.running | length >= 2
- groups.stopped | length >= 0 - groups.stopped | length >= 0
- groups['image_' ~ docker_test_image_alpine] | length == 2 - groups['image_' ~ docker_test_image_alpine] | length == 2
- groups['ansible-test-docker-inventory-container-1'] | length == 1 - groups['ansible-docker-test-docker-inventory-container-1'] | length == 1
- groups['ansible-test-docker-inventory-container-2'] | length == 1 - groups['ansible-docker-test-docker-inventory-container-2'] | length == 1
- groups['unix://var/run/docker.sock'] | length >= 2 - groups['unix://var/run/docker.sock'] | length >= 2
- groups | length >= 12 - groups | length >= 12
# The four additional groups are IDs and short IDs of the containers. # The four additional groups are IDs and short IDs of the containers.
@ -42,4 +42,4 @@
when: when:
# When the integration tests are run inside a docker container, there # When the integration tests are run inside a docker container, there
# will be other containers. # will be other containers.
- inventory_hostname.startswith('ansible-test-docker-inventory-container-') - inventory_hostname.startswith('ansible-docker-test-docker-inventory-container-')

View File

@ -85,21 +85,21 @@
# Cleanup docker daemon # Cleanup docker daemon
- command: 'docker ps --no-trunc --format {% raw %}"{{.Names}}"{% endraw %}' - command: 'docker ps --no-trunc --format {% raw %}"{{.Names}}"{% endraw %}'
- name: "Remove all ansible-test-* docker containers" - name: "Remove all ansible-docker-test-* docker containers"
shell: 'docker ps --no-trunc --format {% raw %}"{{.Names}}"{% endraw %} | grep "^ansible-test-" | xargs -r docker rm -f' shell: 'docker ps --no-trunc --format {% raw %}"{{.Names}}"{% endraw %} | grep "^ansible-docker-test-" | xargs -r docker rm -f'
register: docker_containers register: docker_containers
retries: 3 retries: 3
delay: 3 delay: 3
until: docker_containers is success until: docker_containers is success
ignore_errors: yes ignore_errors: yes
- name: "Remove all ansible-test-* docker volumes" - name: "Remove all ansible-docker-test-* docker volumes"
shell: 'docker volume ls --format {% raw %}"{{.Name}}"{% endraw %} | grep "^ansible-test-" | xargs -r docker volume rm -f' shell: 'docker volume ls --format {% raw %}"{{.Name}}"{% endraw %} | grep "^ansible-docker-test-" | xargs -r docker volume rm -f'
register: docker_volumes register: docker_volumes
ignore_errors: yes ignore_errors: yes
- name: "Remove all ansible-test-* docker networks" - name: "Remove all ansible-docker-test-* docker networks"
shell: 'docker network ls --no-trunc --format {% raw %}"{{.Name}}"{% endraw %} | grep "^ansible-test-" | xargs -r docker network rm' shell: 'docker network ls --no-trunc --format {% raw %}"{{.Name}}"{% endraw %} | grep "^ansible-docker-test-" | xargs -r docker network rm'
register: docker_networks register: docker_networks
ignore_errors: yes ignore_errors: yes

View File

@ -1,3 +1,4 @@
dependencies: dependencies:
#- setup_docker -- done in setup.yml, to work around cleanup problems! #- setup_docker -- done in setup.yml, to work around cleanup problems!
- setup_openssl - setup_openssl
- setup_remote_tmp_dir

View File

@ -25,8 +25,16 @@
}} }}
register: nginx_container register: nginx_container
- name: Copy config files
copy:
src: "{{ item }}"
dest: "{{ remote_tmp_dir }}/{{ item }}"
loop:
- nginx.conf
- nginx.htpasswd
- name: Copy static files into volume - name: Copy static files into volume
command: docker cp {{ role_path }}/files/{{ item }} {{ docker_registry_container_name_frontend }}:/etc/nginx/{{ item }} command: docker cp {{ remote_tmp_dir }}/{{ item }} {{ docker_registry_container_name_frontend }}:/etc/nginx/{{ item }}
loop: loop:
- nginx.conf - nginx.conf
- nginx.htpasswd - nginx.htpasswd
@ -38,27 +46,27 @@
- name: Create private key for frontend certificate - name: Create private key for frontend certificate
community.crypto.openssl_privatekey: community.crypto.openssl_privatekey:
path: '{{ output_dir }}/cert.key' path: '{{ remote_tmp_dir }}/cert.key'
type: ECC type: ECC
curve: secp256r1 curve: secp256r1
force: yes force: yes
- name: Create CSR for frontend certificate - name: Create CSR for frontend certificate
community.crypto.openssl_csr: community.crypto.openssl_csr:
path: '{{ output_dir }}/cert.csr' path: '{{ remote_tmp_dir }}/cert.csr'
privatekey_path: '{{ output_dir }}/cert.key' privatekey_path: '{{ remote_tmp_dir }}/cert.key'
subject_alt_name: subject_alt_name:
- DNS:test-registry.ansible.com - DNS:test-registry.ansible.com
- name: Create frontend certificate - name: Create frontend certificate
community.crypto.openssl_certificate: community.crypto.openssl_certificate:
path: '{{ output_dir }}/cert.pem' path: '{{ remote_tmp_dir }}/cert.pem'
csr_path: '{{ output_dir }}/cert.csr' csr_path: '{{ remote_tmp_dir }}/cert.csr'
privatekey_path: '{{ output_dir }}/cert.key' privatekey_path: '{{ remote_tmp_dir }}/cert.key'
provider: selfsigned provider: selfsigned
- name: Copy dynamic files into volume - name: Copy dynamic files into volume
command: docker cp {{ output_dir }}/{{ item }} {{ docker_registry_container_name_frontend }}:/etc/nginx/{{ item }} command: docker cp {{ remote_tmp_dir }}/{{ item }} {{ docker_registry_container_name_frontend }}:/etc/nginx/{{ item }}
loop: loop:
- cert.pem - cert.pem
- cert.key - cert.key

View File

@ -14,9 +14,9 @@
- name: Create random name prefix and test registry name - name: Create random name prefix and test registry name
set_fact: set_fact:
docker_registry_container_name_registry: '{{ ''ansible-test-registry-%0x'' % ((2**32) | random) }}' docker_registry_container_name_registry: '{{ ''ansible-docker-test-registry-%0x'' % ((2**32) | random) }}'
docker_registry_container_name_nginx: '{{ ''ansible-test-registry-frontend-%0x'' % ((2**32) | random) }}' docker_registry_container_name_nginx: '{{ ''ansible-docker-test-registry-frontend-%0x'' % ((2**32) | random) }}'
docker_registry_container_name_nginx2: '{{ ''ansible-test-registry-frontend2-%0x'' % ((2**32) | random) }}' docker_registry_container_name_nginx2: '{{ ''ansible-docker-test-registry-frontend2-%0x'' % ((2**32) | random) }}'
- name: Create image and container list - name: Create image and container list
set_fact: set_fact: