mirror of
https://github.com/ansible-collections/community.docker.git
synced 2025-12-16 11:58:43 +00:00
* 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.
182 lines
4.8 KiB
YAML
182 lines
4.8 KiB
YAML
---
|
|
####################################################################
|
|
# WARNING: These are designed specifically for Ansible tests #
|
|
# and should not be used as examples of how to write Ansible roles #
|
|
####################################################################
|
|
|
|
- block:
|
|
- name: Create random container name
|
|
set_fact:
|
|
cname: "{{ 'ansible-docker-test-%0x' % ((2**32) | random) }}"
|
|
|
|
- name: Make sure container is not there
|
|
docker_container:
|
|
name: "{{ cname }}"
|
|
state: absent
|
|
force_kill: yes
|
|
|
|
- name: Execute in a non-present container
|
|
docker_container_exec:
|
|
container: "{{ cname }}"
|
|
command: "/bin/bash -c 'ls -a'"
|
|
register: result
|
|
ignore_errors: true
|
|
|
|
- assert:
|
|
that:
|
|
- result is failed
|
|
- "'Could not find container' in result.msg"
|
|
|
|
- name: Make sure container exists
|
|
docker_container:
|
|
name: "{{ cname }}"
|
|
image: "{{ docker_test_image_alpine }}"
|
|
command: '/bin/sh -c "sleep 10m"'
|
|
state: started
|
|
force_kill: yes
|
|
|
|
- name: Execute in a present container (command)
|
|
docker_container_exec:
|
|
container: "{{ cname }}"
|
|
command: "/bin/sh -c 'ls -a'"
|
|
register: result_cmd
|
|
|
|
- assert:
|
|
that:
|
|
- result_cmd.rc == 0
|
|
- "'stdout' in result_cmd"
|
|
- "'stdout_lines' in result_cmd"
|
|
- "'stderr' in result_cmd"
|
|
- "'stderr_lines' in result_cmd"
|
|
|
|
- name: Execute in a present container (argv)
|
|
docker_container_exec:
|
|
container: "{{ cname }}"
|
|
argv:
|
|
- /bin/sh
|
|
- '-c'
|
|
- ls -a
|
|
register: result_argv
|
|
|
|
- assert:
|
|
that:
|
|
- result_argv.rc == 0
|
|
- "'stdout' in result_argv"
|
|
- "'stdout_lines' in result_argv"
|
|
- "'stderr' in result_argv"
|
|
- "'stderr_lines' in result_argv"
|
|
- result_cmd.stdout == result_argv.stdout
|
|
|
|
- name: Execute in a present container (cat without stdin)
|
|
docker_container_exec:
|
|
container: "{{ cname }}"
|
|
argv:
|
|
- /bin/sh
|
|
- '-c'
|
|
- cat
|
|
register: result
|
|
|
|
- assert:
|
|
that:
|
|
- result.rc == 0
|
|
- result.stdout == ''
|
|
- result.stdout_lines == []
|
|
- result.stderr == ''
|
|
- result.stderr_lines == []
|
|
|
|
- name: Execute in a present container (cat with stdin)
|
|
docker_container_exec:
|
|
container: "{{ cname }}"
|
|
argv:
|
|
- /bin/sh
|
|
- '-c'
|
|
- cat
|
|
stdin: Hello world!
|
|
strip_empty_ends: false
|
|
register: result
|
|
|
|
- assert:
|
|
that:
|
|
- result.rc == 0
|
|
- result.stdout == 'Hello world!\n'
|
|
- result.stdout_lines == ['Hello world!']
|
|
- result.stderr == ''
|
|
- result.stderr_lines == []
|
|
|
|
- name: Execute in a present container (cat with stdin, no newline)
|
|
docker_container_exec:
|
|
container: "{{ cname }}"
|
|
argv:
|
|
- /bin/sh
|
|
- '-c'
|
|
- cat
|
|
stdin: Hello world!
|
|
stdin_add_newline: false
|
|
strip_empty_ends: false
|
|
register: result
|
|
|
|
- assert:
|
|
that:
|
|
- result.rc == 0
|
|
- result.stdout == 'Hello world!'
|
|
- result.stdout_lines == ['Hello world!']
|
|
- result.stderr == ''
|
|
- result.stderr_lines == []
|
|
|
|
- name: Execute in a present container (cat with stdin, newline but stripping)
|
|
docker_container_exec:
|
|
container: "{{ cname }}"
|
|
argv:
|
|
- /bin/sh
|
|
- '-c'
|
|
- cat
|
|
stdin: Hello world!
|
|
stdin_add_newline: true
|
|
strip_empty_ends: true
|
|
register: result
|
|
|
|
- assert:
|
|
that:
|
|
- result.rc == 0
|
|
- result.stdout == 'Hello world!'
|
|
- result.stdout_lines == ['Hello world!']
|
|
- result.stderr == ''
|
|
- result.stderr_lines == []
|
|
|
|
- name: Prepare long string
|
|
set_fact:
|
|
very_long_string: "{{ 'something long ' * 10000 }}"
|
|
very_long_string2: "{{ 'something else ' * 5000 }}"
|
|
|
|
- name: Execute in a present container (long stdin)
|
|
docker_container_exec:
|
|
container: "{{ cname }}"
|
|
argv:
|
|
- /bin/sh
|
|
- '-c'
|
|
- cat
|
|
stdin: |-
|
|
{{ very_long_string }}
|
|
{{ very_long_string2 }}
|
|
register: result
|
|
|
|
- assert:
|
|
that:
|
|
- result.rc == 0
|
|
- result.stdout == very_long_string ~ '\n' ~ very_long_string2
|
|
- result.stdout_lines == [very_long_string, very_long_string2]
|
|
- result.stderr == ''
|
|
- result.stderr_lines == []
|
|
|
|
always:
|
|
- name: Cleanup
|
|
docker_container:
|
|
name: "{{ cname }}"
|
|
state: absent
|
|
force_kill: yes
|
|
|
|
when: docker_py_version is version('1.8.0', '>=') and docker_api_version is version('1.20', '>=')
|
|
|
|
- fail: msg="Too old docker / docker-py version to run docker_container_exec tests!"
|
|
when: not(docker_py_version is version('1.8.0', '>=') and docker_api_version is version('1.20', '>=')) and (ansible_distribution != 'CentOS' or ansible_distribution_major_version|int > 6)
|