1--- 2- name: Registering container name 3 set_fact: 4 cname: "{{ cname_prefix ~ '-mounts' }}" 5 cname_h1: "{{ cname_prefix ~ '-mounts-h1' }}" 6 cname_h2: "{{ cname_prefix ~ '-mounts-h2' }}" 7- name: Registering container name 8 set_fact: 9 cnames: "{{ cnames + [cname, cname_h1, cname_h2] }}" 10 11#################################################################### 12## keep_volumes #################################################### 13#################################################################### 14 15# TODO: - keep_volumes 16 17#################################################################### 18## mounts ########################################################## 19#################################################################### 20 21- name: mounts 22 docker_container: 23 image: quay.io/ansible/docker-test-containers:alpine3.8 24 command: '/bin/sh -c "sleep 10m"' 25 name: "{{ cname }}" 26 state: started 27 mounts: 28 - source: /tmp 29 target: /tmp 30 type: bind 31 - source: / 32 target: /whatever 33 type: bind 34 read_only: no 35 register: mounts_1 36 ignore_errors: yes 37 38- name: mounts (idempotency) 39 docker_container: 40 image: quay.io/ansible/docker-test-containers:alpine3.8 41 command: '/bin/sh -c "sleep 10m"' 42 name: "{{ cname }}" 43 state: started 44 mounts: 45 - source: / 46 target: /whatever 47 type: bind 48 read_only: no 49 - source: /tmp 50 target: /tmp 51 type: bind 52 register: mounts_2 53 ignore_errors: yes 54 55- name: mounts (less mounts) 56 docker_container: 57 image: quay.io/ansible/docker-test-containers:alpine3.8 58 command: '/bin/sh -c "sleep 10m"' 59 name: "{{ cname }}" 60 state: started 61 mounts: 62 - source: /tmp 63 target: /tmp 64 type: bind 65 register: mounts_3 66 ignore_errors: yes 67 68- name: mounts (more mounts) 69 docker_container: 70 image: quay.io/ansible/docker-test-containers:alpine3.8 71 command: '/bin/sh -c "sleep 10m"' 72 name: "{{ cname }}" 73 state: started 74 mounts: 75 - source: /tmp 76 target: /tmp 77 type: bind 78 - source: /tmp 79 target: /somewhereelse 80 type: bind 81 read_only: yes 82 force_kill: yes 83 register: mounts_4 84 ignore_errors: yes 85 86- name: mounts (different modes) 87 docker_container: 88 image: quay.io/ansible/docker-test-containers:alpine3.8 89 command: '/bin/sh -c "sleep 10m"' 90 name: "{{ cname }}" 91 state: started 92 mounts: 93 - source: /tmp 94 target: /tmp 95 type: bind 96 - source: /tmp 97 target: /somewhereelse 98 type: bind 99 read_only: no 100 force_kill: yes 101 register: mounts_5 102 ignore_errors: yes 103 104- name: mounts (endpoint collision) 105 docker_container: 106 image: quay.io/ansible/docker-test-containers:alpine3.8 107 command: '/bin/sh -c "sleep 10m"' 108 name: "{{ cname }}" 109 state: started 110 mounts: 111 - source: /home 112 target: /x 113 type: bind 114 - source: /etc 115 target: /x 116 type: bind 117 read_only: no 118 force_kill: yes 119 register: mounts_6 120 ignore_errors: yes 121 122- name: cleanup 123 docker_container: 124 name: "{{ cname }}" 125 state: absent 126 force_kill: yes 127 diff: no 128 129- assert: 130 that: 131 - mounts_1 is changed 132 - mounts_2 is not changed 133 - mounts_3 is not changed 134 - mounts_4 is changed 135 - mounts_5 is changed 136 - mounts_6 is failed 137 - "'The mount point \"/x\" appears twice in the mounts option' == mounts_6.msg" 138 when: docker_py_version is version('2.6.0', '>=') 139- assert: 140 that: 141 - mounts_1 is failed 142 - "('version is ' ~ docker_py_version ~ ' ') in mounts_1.msg" 143 - "'Minimum version required is 2.6.0 ' in mounts_1.msg" 144 when: docker_py_version is version('2.6.0', '<') 145 146#################################################################### 147## mounts + volumes ################################################ 148#################################################################### 149 150- name: mounts + volumes 151 docker_container: 152 image: quay.io/ansible/docker-test-containers:alpine3.8 153 command: '/bin/sh -c "sleep 10m"' 154 name: "{{ cname }}" 155 state: started 156 mounts: 157 - source: / 158 target: /whatever 159 type: bind 160 read_only: yes 161 volumes: 162 - /tmp:/tmp 163 register: mounts_volumes_1 164 ignore_errors: yes 165 166- name: mounts + volumes (idempotency) 167 docker_container: 168 image: quay.io/ansible/docker-test-containers:alpine3.8 169 command: '/bin/sh -c "sleep 10m"' 170 name: "{{ cname }}" 171 state: started 172 mounts: 173 - source: / 174 target: /whatever 175 type: bind 176 read_only: yes 177 volumes: 178 - /tmp:/tmp 179 register: mounts_volumes_2 180 ignore_errors: yes 181 182- name: mounts + volumes (switching) 183 docker_container: 184 image: quay.io/ansible/docker-test-containers:alpine3.8 185 command: '/bin/sh -c "sleep 10m"' 186 name: "{{ cname }}" 187 state: started 188 mounts: 189 - source: /tmp 190 target: /tmp 191 type: bind 192 read_only: no 193 volumes: 194 - /:/whatever:ro 195 force_kill: yes 196 register: mounts_volumes_3 197 ignore_errors: yes 198 199- name: mounts + volumes (collision, should fail) 200 docker_container: 201 image: quay.io/ansible/docker-test-containers:alpine3.8 202 command: '/bin/sh -c "sleep 10m"' 203 name: "{{ cname }}" 204 state: started 205 mounts: 206 - source: /tmp 207 target: /tmp 208 type: bind 209 read_only: no 210 volumes: 211 - /tmp:/tmp 212 force_kill: yes 213 register: mounts_volumes_4 214 ignore_errors: yes 215 216- name: cleanup 217 docker_container: 218 name: "{{ cname }}" 219 state: absent 220 force_kill: yes 221 diff: no 222 223- assert: 224 that: 225 - mounts_volumes_1 is changed 226 - mounts_volumes_2 is not changed 227 - mounts_volumes_3 is changed 228 - mounts_volumes_4 is failed 229 - "'The mount point \"/tmp\" appears both in the volumes and mounts option' in mounts_volumes_4.msg" 230 when: docker_py_version is version('2.6.0', '>=') 231- assert: 232 that: 233 - mounts_volumes_1 is failed 234 - "('version is ' ~ docker_py_version ~ ' ') in mounts_1.msg" 235 - "'Minimum version required is 2.6.0 ' in mounts_1.msg" 236 when: docker_py_version is version('2.6.0', '<') 237 238#################################################################### 239## volume_driver ################################################### 240#################################################################### 241 242- name: volume_driver 243 docker_container: 244 image: quay.io/ansible/docker-test-containers:alpine3.8 245 command: '/bin/sh -c "sleep 10m"' 246 name: "{{ cname }}" 247 volume_driver: local 248 state: started 249 register: volume_driver_1 250 251- name: volume_driver (idempotency) 252 docker_container: 253 image: quay.io/ansible/docker-test-containers:alpine3.8 254 command: '/bin/sh -c "sleep 10m"' 255 name: "{{ cname }}" 256 volume_driver: local 257 state: started 258 register: volume_driver_2 259 260- name: volume_driver (change) 261 docker_container: 262 image: quay.io/ansible/docker-test-containers:alpine3.8 263 command: '/bin/sh -c "sleep 10m"' 264 name: "{{ cname }}" 265 volume_driver: / 266 state: started 267 force_kill: yes 268 register: volume_driver_3 269 270- name: cleanup 271 docker_container: 272 name: "{{ cname }}" 273 state: absent 274 force_kill: yes 275 diff: no 276 277- assert: 278 that: 279 - volume_driver_1 is changed 280 - volume_driver_2 is not changed 281 - volume_driver_3 is changed 282 283#################################################################### 284## volumes ######################################################### 285#################################################################### 286 287- name: volumes 288 docker_container: 289 image: quay.io/ansible/docker-test-containers:alpine3.8 290 command: '/bin/sh -c "sleep 10m"' 291 name: "{{ cname }}" 292 state: started 293 volumes: 294 - "/tmp:/tmp" 295 - "/:/whatever:rw,z" 296 register: volumes_1 297 298- name: volumes (idempotency) 299 docker_container: 300 image: quay.io/ansible/docker-test-containers:alpine3.8 301 command: '/bin/sh -c "sleep 10m"' 302 name: "{{ cname }}" 303 state: started 304 volumes: 305 - "/:/whatever:rw,z" 306 - "/tmp:/tmp" 307 register: volumes_2 308 309- name: volumes (less volumes) 310 docker_container: 311 image: quay.io/ansible/docker-test-containers:alpine3.8 312 command: '/bin/sh -c "sleep 10m"' 313 name: "{{ cname }}" 314 state: started 315 volumes: 316 - "/tmp:/tmp" 317 register: volumes_3 318 319- name: volumes (more volumes) 320 docker_container: 321 image: quay.io/ansible/docker-test-containers:alpine3.8 322 command: '/bin/sh -c "sleep 10m"' 323 name: "{{ cname }}" 324 state: started 325 volumes: 326 - "/tmp:/tmp" 327 - "/tmp:/somewhereelse:ro,Z" 328 force_kill: yes 329 register: volumes_4 330 331- name: volumes (different modes) 332 docker_container: 333 image: quay.io/ansible/docker-test-containers:alpine3.8 334 command: '/bin/sh -c "sleep 10m"' 335 name: "{{ cname }}" 336 state: started 337 volumes: 338 - "/tmp:/tmp" 339 - "/tmp:/somewhereelse:ro" 340 force_kill: yes 341 register: volumes_5 342 343- name: volumes (collision) 344 docker_container: 345 image: quay.io/ansible/docker-test-containers:alpine3.8 346 command: '/bin/sh -c "sleep 10m"' 347 name: "{{ cname }}" 348 state: started 349 volumes: 350 - "/etc:/tmp" 351 - "/home:/tmp:ro" 352 force_kill: yes 353 register: volumes_6 354 ignore_errors: yes 355 356- name: cleanup 357 docker_container: 358 name: "{{ cname }}" 359 state: absent 360 force_kill: yes 361 diff: no 362 363- assert: 364 that: 365 - volumes_1 is changed 366 - volumes_2 is not changed 367 - volumes_3 is not changed 368 - volumes_4 is changed 369 - volumes_5 is changed 370 - volumes_6 is failed 371 - "'The mount point \"/tmp\" appears twice in the volumes option' in volumes_6.msg" 372 373#################################################################### 374## volumes_from #################################################### 375#################################################################### 376 377- name: start helpers 378 docker_container: 379 image: quay.io/ansible/docker-test-containers:alpine3.8 380 command: '/bin/sh -c "sleep 10m"' 381 name: "{{ container_name }}" 382 state: started 383 volumes: 384 - "{{ '/tmp:/tmp' if container_name == cname_h1 else '/:/whatever:ro' }}" 385 loop: 386 - "{{ cname_h1 }}" 387 - "{{ cname_h2 }}" 388 loop_control: 389 loop_var: container_name 390 391- name: volumes_from 392 docker_container: 393 image: quay.io/ansible/docker-test-containers:alpine3.8 394 command: '/bin/sh -c "sleep 10m"' 395 name: "{{ cname }}" 396 state: started 397 volumes_from: "{{ cname_h1 }}" 398 register: volumes_from_1 399 400- name: volumes_from (idempotency) 401 docker_container: 402 image: quay.io/ansible/docker-test-containers:alpine3.8 403 command: '/bin/sh -c "sleep 10m"' 404 name: "{{ cname }}" 405 state: started 406 volumes_from: "{{ cname_h1 }}" 407 register: volumes_from_2 408 409- name: volumes_from (change) 410 docker_container: 411 image: quay.io/ansible/docker-test-containers:alpine3.8 412 command: '/bin/sh -c "sleep 10m"' 413 name: "{{ cname }}" 414 state: started 415 volumes_from: "{{ cname_h2 }}" 416 force_kill: yes 417 register: volumes_from_3 418 419- name: cleanup 420 docker_container: 421 name: "{{ container_name }}" 422 state: absent 423 force_kill: yes 424 loop: 425 - "{{ cname }}" 426 - "{{ cname_h1 }}" 427 - "{{ cname_h2 }}" 428 loop_control: 429 loop_var: container_name 430 diff: no 431 432- assert: 433 that: 434 - volumes_from_1 is changed 435 - volumes_from_2 is not changed 436 - volumes_from_3 is changed 437 438#################################################################### 439#################################################################### 440#################################################################### 441