48541910bf
* Add mount endpoint collision detection. * Add changelog. * Fix error.
440 lines
10 KiB
YAML
440 lines
10 KiB
YAML
---
|
|
- name: Registering container name
|
|
set_fact:
|
|
cname: "{{ cname_prefix ~ '-mounts' }}"
|
|
cname_h1: "{{ cname_prefix ~ '-mounts-h1' }}"
|
|
cname_h2: "{{ cname_prefix ~ '-mounts-h2' }}"
|
|
- name: Registering container name
|
|
set_fact:
|
|
cnames: "{{ cnames + [cname, cname_h1, cname_h2] }}"
|
|
|
|
####################################################################
|
|
## keep_volumes ####################################################
|
|
####################################################################
|
|
|
|
# TODO: - keep_volumes
|
|
|
|
####################################################################
|
|
## mounts ##########################################################
|
|
####################################################################
|
|
|
|
- name: mounts
|
|
docker_container:
|
|
image: alpine:3.8
|
|
command: '/bin/sh -c "sleep 10m"'
|
|
name: "{{ cname }}"
|
|
state: started
|
|
mounts:
|
|
- source: /tmp
|
|
target: /tmp
|
|
type: bind
|
|
- source: /
|
|
target: /whatever
|
|
type: bind
|
|
read_only: no
|
|
register: mounts_1
|
|
ignore_errors: yes
|
|
|
|
- name: mounts (idempotency)
|
|
docker_container:
|
|
image: alpine:3.8
|
|
command: '/bin/sh -c "sleep 10m"'
|
|
name: "{{ cname }}"
|
|
state: started
|
|
mounts:
|
|
- source: /
|
|
target: /whatever
|
|
type: bind
|
|
read_only: no
|
|
- source: /tmp
|
|
target: /tmp
|
|
type: bind
|
|
register: mounts_2
|
|
ignore_errors: yes
|
|
|
|
- name: mounts (less mounts)
|
|
docker_container:
|
|
image: alpine:3.8
|
|
command: '/bin/sh -c "sleep 10m"'
|
|
name: "{{ cname }}"
|
|
state: started
|
|
mounts:
|
|
- source: /tmp
|
|
target: /tmp
|
|
type: bind
|
|
register: mounts_3
|
|
ignore_errors: yes
|
|
|
|
- name: mounts (more mounts)
|
|
docker_container:
|
|
image: alpine:3.8
|
|
command: '/bin/sh -c "sleep 10m"'
|
|
name: "{{ cname }}"
|
|
state: started
|
|
mounts:
|
|
- source: /tmp
|
|
target: /tmp
|
|
type: bind
|
|
- source: /tmp
|
|
target: /somewhereelse
|
|
type: bind
|
|
read_only: yes
|
|
force_kill: yes
|
|
register: mounts_4
|
|
ignore_errors: yes
|
|
|
|
- name: mounts (different modes)
|
|
docker_container:
|
|
image: alpine:3.8
|
|
command: '/bin/sh -c "sleep 10m"'
|
|
name: "{{ cname }}"
|
|
state: started
|
|
mounts:
|
|
- source: /tmp
|
|
target: /tmp
|
|
type: bind
|
|
- source: /tmp
|
|
target: /somewhereelse
|
|
type: bind
|
|
read_only: no
|
|
force_kill: yes
|
|
register: mounts_5
|
|
ignore_errors: yes
|
|
|
|
- name: mounts (endpoint collision)
|
|
docker_container:
|
|
image: alpine:3.8
|
|
command: '/bin/sh -c "sleep 10m"'
|
|
name: "{{ cname }}"
|
|
state: started
|
|
mounts:
|
|
- source: /home
|
|
target: /x
|
|
type: bind
|
|
- source: /etc
|
|
target: /x
|
|
type: bind
|
|
read_only: no
|
|
force_kill: yes
|
|
register: mounts_6
|
|
ignore_errors: yes
|
|
|
|
- name: cleanup
|
|
docker_container:
|
|
name: "{{ cname }}"
|
|
state: absent
|
|
force_kill: yes
|
|
diff: no
|
|
|
|
- assert:
|
|
that:
|
|
- mounts_1 is changed
|
|
- mounts_2 is not changed
|
|
- mounts_3 is not changed
|
|
- mounts_4 is changed
|
|
- mounts_5 is changed
|
|
- mounts_6 is failed
|
|
- "'The mount point \"/x\" appears twice in the mounts option' == mounts_6.msg"
|
|
when: docker_py_version is version('2.6.0', '>=')
|
|
- assert:
|
|
that:
|
|
- mounts_1 is failed
|
|
- "('version is ' ~ docker_py_version ~ ' ') in mounts_1.msg"
|
|
- "'Minimum version required is 2.6.0 ' in mounts_1.msg"
|
|
when: docker_py_version is version('2.6.0', '<')
|
|
|
|
####################################################################
|
|
## mounts + volumes ################################################
|
|
####################################################################
|
|
|
|
- name: mounts + volumes
|
|
docker_container:
|
|
image: alpine:3.8
|
|
command: '/bin/sh -c "sleep 10m"'
|
|
name: "{{ cname }}"
|
|
state: started
|
|
mounts:
|
|
- source: /
|
|
target: /whatever
|
|
type: bind
|
|
read_only: yes
|
|
volumes:
|
|
- /tmp:/tmp
|
|
register: mounts_volumes_1
|
|
ignore_errors: yes
|
|
|
|
- name: mounts + volumes (idempotency)
|
|
docker_container:
|
|
image: alpine:3.8
|
|
command: '/bin/sh -c "sleep 10m"'
|
|
name: "{{ cname }}"
|
|
state: started
|
|
mounts:
|
|
- source: /
|
|
target: /whatever
|
|
type: bind
|
|
read_only: yes
|
|
volumes:
|
|
- /tmp:/tmp
|
|
register: mounts_volumes_2
|
|
ignore_errors: yes
|
|
|
|
- name: mounts + volumes (switching)
|
|
docker_container:
|
|
image: alpine:3.8
|
|
command: '/bin/sh -c "sleep 10m"'
|
|
name: "{{ cname }}"
|
|
state: started
|
|
mounts:
|
|
- source: /tmp
|
|
target: /tmp
|
|
type: bind
|
|
read_only: no
|
|
volumes:
|
|
- /:/whatever:ro
|
|
force_kill: yes
|
|
register: mounts_volumes_3
|
|
ignore_errors: yes
|
|
|
|
- name: mounts + volumes (collision, should fail)
|
|
docker_container:
|
|
image: alpine:3.8
|
|
command: '/bin/sh -c "sleep 10m"'
|
|
name: "{{ cname }}"
|
|
state: started
|
|
mounts:
|
|
- source: /tmp
|
|
target: /tmp
|
|
type: bind
|
|
read_only: no
|
|
volumes:
|
|
- /tmp:/tmp
|
|
force_kill: yes
|
|
register: mounts_volumes_4
|
|
ignore_errors: yes
|
|
|
|
- name: cleanup
|
|
docker_container:
|
|
name: "{{ cname }}"
|
|
state: absent
|
|
force_kill: yes
|
|
diff: no
|
|
|
|
- assert:
|
|
that:
|
|
- mounts_volumes_1 is changed
|
|
- mounts_volumes_2 is not changed
|
|
- mounts_volumes_3 is changed
|
|
- mounts_volumes_4 is failed
|
|
- "'The mount point \"/tmp\" appears both in the volumes and mounts option' in mounts_volumes_4.msg"
|
|
when: docker_py_version is version('2.6.0', '>=')
|
|
- assert:
|
|
that:
|
|
- mounts_volumes_1 is failed
|
|
- "('version is ' ~ docker_py_version ~ ' ') in mounts_1.msg"
|
|
- "'Minimum version required is 2.6.0 ' in mounts_1.msg"
|
|
when: docker_py_version is version('2.6.0', '<')
|
|
|
|
####################################################################
|
|
## volume_driver ###################################################
|
|
####################################################################
|
|
|
|
- name: volume_driver
|
|
docker_container:
|
|
image: alpine:3.8
|
|
command: '/bin/sh -c "sleep 10m"'
|
|
name: "{{ cname }}"
|
|
volume_driver: local
|
|
state: started
|
|
register: volume_driver_1
|
|
|
|
- name: volume_driver (idempotency)
|
|
docker_container:
|
|
image: alpine:3.8
|
|
command: '/bin/sh -c "sleep 10m"'
|
|
name: "{{ cname }}"
|
|
volume_driver: local
|
|
state: started
|
|
register: volume_driver_2
|
|
|
|
- name: volume_driver (change)
|
|
docker_container:
|
|
image: alpine:3.8
|
|
command: '/bin/sh -c "sleep 10m"'
|
|
name: "{{ cname }}"
|
|
volume_driver: /
|
|
state: started
|
|
force_kill: yes
|
|
register: volume_driver_3
|
|
|
|
- name: cleanup
|
|
docker_container:
|
|
name: "{{ cname }}"
|
|
state: absent
|
|
force_kill: yes
|
|
diff: no
|
|
|
|
- assert:
|
|
that:
|
|
- volume_driver_1 is changed
|
|
- volume_driver_2 is not changed
|
|
- volume_driver_3 is changed
|
|
|
|
####################################################################
|
|
## volumes #########################################################
|
|
####################################################################
|
|
|
|
- name: volumes
|
|
docker_container:
|
|
image: alpine:3.8
|
|
command: '/bin/sh -c "sleep 10m"'
|
|
name: "{{ cname }}"
|
|
state: started
|
|
volumes:
|
|
- "/tmp:/tmp"
|
|
- "/:/whatever:rw,z"
|
|
register: volumes_1
|
|
|
|
- name: volumes (idempotency)
|
|
docker_container:
|
|
image: alpine:3.8
|
|
command: '/bin/sh -c "sleep 10m"'
|
|
name: "{{ cname }}"
|
|
state: started
|
|
volumes:
|
|
- "/:/whatever:rw,z"
|
|
- "/tmp:/tmp"
|
|
register: volumes_2
|
|
|
|
- name: volumes (less volumes)
|
|
docker_container:
|
|
image: alpine:3.8
|
|
command: '/bin/sh -c "sleep 10m"'
|
|
name: "{{ cname }}"
|
|
state: started
|
|
volumes:
|
|
- "/tmp:/tmp"
|
|
register: volumes_3
|
|
|
|
- name: volumes (more volumes)
|
|
docker_container:
|
|
image: alpine:3.8
|
|
command: '/bin/sh -c "sleep 10m"'
|
|
name: "{{ cname }}"
|
|
state: started
|
|
volumes:
|
|
- "/tmp:/tmp"
|
|
- "/tmp:/somewhereelse:ro,Z"
|
|
force_kill: yes
|
|
register: volumes_4
|
|
|
|
- name: volumes (different modes)
|
|
docker_container:
|
|
image: alpine:3.8
|
|
command: '/bin/sh -c "sleep 10m"'
|
|
name: "{{ cname }}"
|
|
state: started
|
|
volumes:
|
|
- "/tmp:/tmp"
|
|
- "/tmp:/somewhereelse:ro"
|
|
force_kill: yes
|
|
register: volumes_5
|
|
|
|
- name: volumes (collision)
|
|
docker_container:
|
|
image: alpine:3.8
|
|
command: '/bin/sh -c "sleep 10m"'
|
|
name: "{{ cname }}"
|
|
state: started
|
|
volumes:
|
|
- "/etc:/tmp"
|
|
- "/home:/tmp:ro"
|
|
force_kill: yes
|
|
register: volumes_6
|
|
ignore_errors: yes
|
|
|
|
- name: cleanup
|
|
docker_container:
|
|
name: "{{ cname }}"
|
|
state: absent
|
|
force_kill: yes
|
|
diff: no
|
|
|
|
- assert:
|
|
that:
|
|
- volumes_1 is changed
|
|
- volumes_2 is not changed
|
|
- volumes_3 is not changed
|
|
- volumes_4 is changed
|
|
- volumes_5 is changed
|
|
- volumes_6 is failed
|
|
- "'The mount point \"/tmp\" appears twice in the volumes option' in volumes_6.msg"
|
|
|
|
####################################################################
|
|
## volumes_from ####################################################
|
|
####################################################################
|
|
|
|
- name: start helpers
|
|
docker_container:
|
|
image: alpine:3.8
|
|
command: '/bin/sh -c "sleep 10m"'
|
|
name: "{{ container_name }}"
|
|
state: started
|
|
volumes:
|
|
- "{{ '/tmp:/tmp' if container_name == cname_h1 else '/:/whatever:ro' }}"
|
|
loop:
|
|
- "{{ cname_h1 }}"
|
|
- "{{ cname_h2 }}"
|
|
loop_control:
|
|
loop_var: container_name
|
|
|
|
- name: volumes_from
|
|
docker_container:
|
|
image: alpine:3.8
|
|
command: '/bin/sh -c "sleep 10m"'
|
|
name: "{{ cname }}"
|
|
state: started
|
|
volumes_from: "{{ cname_h1 }}"
|
|
register: volumes_from_1
|
|
|
|
- name: volumes_from (idempotency)
|
|
docker_container:
|
|
image: alpine:3.8
|
|
command: '/bin/sh -c "sleep 10m"'
|
|
name: "{{ cname }}"
|
|
state: started
|
|
volumes_from: "{{ cname_h1 }}"
|
|
register: volumes_from_2
|
|
|
|
- name: volumes_from (change)
|
|
docker_container:
|
|
image: alpine:3.8
|
|
command: '/bin/sh -c "sleep 10m"'
|
|
name: "{{ cname }}"
|
|
state: started
|
|
volumes_from: "{{ cname_h2 }}"
|
|
force_kill: yes
|
|
register: volumes_from_3
|
|
|
|
- name: cleanup
|
|
docker_container:
|
|
name: "{{ container_name }}"
|
|
state: absent
|
|
force_kill: yes
|
|
loop:
|
|
- "{{ cname }}"
|
|
- "{{ cname_h1 }}"
|
|
- "{{ cname_h2 }}"
|
|
loop_control:
|
|
loop_var: container_name
|
|
diff: no
|
|
|
|
- assert:
|
|
that:
|
|
- volumes_from_1 is changed
|
|
- volumes_from_2 is not changed
|
|
- volumes_from_3 is changed
|
|
|
|
####################################################################
|
|
####################################################################
|
|
####################################################################
|