Fix linting errors.

This commit is contained in:
Felix Fontein 2025-04-26 11:20:32 +02:00
parent 795e6b23dc
commit 2487d1a0bf
125 changed files with 5778 additions and 5662 deletions

View File

@ -1,3 +1,4 @@
---
# 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
@ -49,11 +50,11 @@ jobs:
parameters:
jobs:
- ${{ if eq(length(parameters.groups), 0) }}:
- ${{ each target in parameters.targets }}:
- name: ${{ format(parameters.nameFormat, coalesce(target.name, target.test)) }}
test: ${{ format(parameters.testFormat, coalesce(target.test, target.name)) }}
- ${{ if not(eq(length(parameters.groups), 0)) }}:
- ${{ each group in parameters.groups }}:
- ${{ each target in parameters.targets }}:
- name: ${{ format(format(parameters.nameGroupFormat, parameters.nameFormat), coalesce(target.name, target.test), group) }}
test: ${{ format(format(parameters.testGroupFormat, parameters.testFormat), coalesce(target.test, target.name), group) }}
- name: ${{ format(parameters.nameFormat, coalesce(target.name, target.test)) }}
test: ${{ format(parameters.testFormat, coalesce(target.test, target.name)) }}
- ${{ if not(eq(length(parameters.groups), 0)) }}:
- ${{ each group in parameters.groups }}:
- ${{ each target in parameters.targets }}:
- name: ${{ format(format(parameters.nameGroupFormat, parameters.nameFormat), coalesce(target.name, target.test), group) }}
test: ${{ format(format(parameters.testGroupFormat, parameters.testFormat), coalesce(target.test, target.name), group) }}

View File

@ -1,3 +1,4 @@
---
# 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
@ -13,37 +14,37 @@ parameters:
jobs:
- ${{ each job in parameters.jobs }}:
- job: test_${{ replace(replace(replace(job.test, '/', '_'), '.', '_'), '-', '_') }}
displayName: ${{ job.name }}
container: default
workspace:
clean: all
steps:
- checkout: self
fetchDepth: $(fetchDepth)
path: $(checkoutPath)
- bash: .azure-pipelines/scripts/run-tests.sh "$(entryPoint)" "${{ job.test }}" "$(coverageBranches)"
displayName: Run Tests
- bash: .azure-pipelines/scripts/process-results.sh
condition: succeededOrFailed()
displayName: Process Results
- bash: .azure-pipelines/scripts/aggregate-coverage.sh "$(Agent.TempDirectory)"
condition: eq(variables.haveCoverageData, 'true')
displayName: Aggregate Coverage Data
- task: PublishTestResults@2
condition: eq(variables.haveTestResults, 'true')
inputs:
testResultsFiles: "$(outputPath)/junit/*.xml"
displayName: Publish Test Results
- task: PublishPipelineArtifact@1
condition: eq(variables.haveBotResults, 'true')
displayName: Publish Bot Results
inputs:
targetPath: "$(outputPath)/bot/"
artifactName: "Bot $(System.JobAttempt) $(System.StageDisplayName) $(System.JobDisplayName)"
- task: PublishPipelineArtifact@1
condition: eq(variables.haveCoverageData, 'true')
displayName: Publish Coverage Data
inputs:
targetPath: "$(Agent.TempDirectory)/coverage/"
artifactName: "Coverage $(System.JobAttempt) $(System.StageDisplayName) $(System.JobDisplayName)"
- job: test_${{ replace(replace(replace(job.test, '/', '_'), '.', '_'), '-', '_') }}
displayName: ${{ job.name }}
container: default
workspace:
clean: all
steps:
- checkout: self
fetchDepth: $(fetchDepth)
path: $(checkoutPath)
- bash: .azure-pipelines/scripts/run-tests.sh "$(entryPoint)" "${{ job.test }}" "$(coverageBranches)"
displayName: Run Tests
- bash: .azure-pipelines/scripts/process-results.sh
condition: succeededOrFailed()
displayName: Process Results
- bash: .azure-pipelines/scripts/aggregate-coverage.sh "$(Agent.TempDirectory)"
condition: eq(variables.haveCoverageData, 'true')
displayName: Aggregate Coverage Data
- task: PublishTestResults@2
condition: eq(variables.haveTestResults, 'true')
inputs:
testResultsFiles: "$(outputPath)/junit/*.xml"
displayName: Publish Test Results
- task: PublishPipelineArtifact@1
condition: eq(variables.haveBotResults, 'true')
displayName: Publish Bot Results
inputs:
targetPath: "$(outputPath)/bot/"
artifactName: "Bot $(System.JobAttempt) $(System.StageDisplayName) $(System.JobDisplayName)"
- task: PublishPipelineArtifact@1
condition: eq(variables.haveCoverageData, 'true')
displayName: Publish Coverage Data
inputs:
targetPath: "$(Agent.TempDirectory)/coverage/"
artifactName: "Coverage $(System.JobAttempt) $(System.StageDisplayName) $(System.JobDisplayName)"

View File

@ -7,7 +7,7 @@
# https://github.com/marketplace/actions/ansible-test
name: EOL CI
on:
'on':
# Run EOL CI against all pushes (direct commits, also merged PRs), Pull Requests
push:
branches:

View File

@ -4,7 +4,7 @@
# SPDX-License-Identifier: GPL-3.0-or-later
name: Helper Docker images for testing
on:
'on':
# Run CI against all pushes (direct commits, also merged PRs), Pull Requests
push:
branches:

View File

@ -7,7 +7,7 @@ name: Collection Docs
concurrency:
group: docs-pr-${{ github.head_ref }}
cancel-in-progress: true
on:
'on':
pull_request_target:
types: [opened, synchronize, reopened, closed]

View File

@ -7,7 +7,7 @@ name: Collection Docs
concurrency:
group: docs-push-${{ github.sha }}
cancel-in-progress: true
on:
'on':
push:
branches:
- main

View File

@ -4,7 +4,7 @@
# SPDX-License-Identifier: GPL-3.0-or-later
name: execution environment
on:
'on':
# Run CI against all pushes (direct commits, also merged PRs), Pull Requests
push:
branches:

View File

@ -15,7 +15,7 @@ description: Modules and plugins for working with Docker
license:
- GPL-3.0-or-later
- Apache-2.0
#license_file: COPYING
# license_file: COPYING
tags:
- docker
dependencies:

View File

@ -27,6 +27,7 @@ extends_documentation_fragment:
"""
EXAMPLES = r"""
---
- name: Get facts on current container
community.docker.current_container_facts:

View File

@ -178,6 +178,7 @@ seealso:
"""
EXAMPLES = r"""
---
# Examples use the django example at https://docs.docker.com/compose/django. Follow it to create the
# flask directory

View File

@ -119,6 +119,7 @@ notes:
"""
EXAMPLES = r"""
---
- name: Run a simple command (command)
community.docker.docker_compose_v2_exec:
service: foo

View File

@ -75,6 +75,7 @@ seealso:
"""
EXAMPLES = r"""
---
- name: Pull images for flask project
community.docker.docker_compose_v2_pull:
project_src: /path/to/flask

View File

@ -187,6 +187,7 @@ notes:
"""
EXAMPLES = r"""
---
- name: Run a simple command (command)
community.docker.docker_compose_v2_run:
service: foo

View File

@ -111,6 +111,7 @@ author:
"""
EXAMPLES = r"""
---
- name: Create config foo (from a file on the control machine)
community.docker.docker_config:
name: foo

View File

@ -996,6 +996,7 @@ requirements:
"""
EXAMPLES = r"""
---
- name: Create a data container
community.docker.docker_container:
name: mydata

View File

@ -120,6 +120,7 @@ requirements:
"""
EXAMPLES = r"""
---
- name: Copy a file into the container
community.docker.docker_container_copy_into:
container: mydata

View File

@ -111,6 +111,7 @@ requirements:
"""
EXAMPLES = r"""
---
- name: Run a simple command (command)
community.docker.docker_container_exec:
container: foo

View File

@ -40,6 +40,7 @@ requirements:
"""
EXAMPLES = r"""
---
- name: Get infos on container
community.docker.docker_container_info:
name: mydata

View File

@ -51,6 +51,7 @@ author:
"""
EXAMPLES = r"""
---
- name: Get infos on contexts
community.docker.docker_context_info:
register: result

View File

@ -122,6 +122,7 @@ requirements:
"""
EXAMPLES = r"""
---
- name: Get info on docker host
community.docker.docker_host_info:
register: result

View File

@ -263,6 +263,7 @@ seealso:
"""
EXAMPLES = r"""
---
- name: Pull an image
community.docker.docker_image:
name: pacur/centos-7

View File

@ -248,6 +248,7 @@ seealso:
"""
EXAMPLES = r"""
---
- name: Build Python 3.12 image
community.docker.docker_image_build:
name: localhost/python/3.12:latest

View File

@ -71,6 +71,7 @@ seealso:
"""
EXAMPLES = r"""
---
- name: Export an image
community.docker.docker_image_export:
name: pacur/centos-7

View File

@ -46,6 +46,7 @@ author:
"""
EXAMPLES = r"""
---
- name: Inspect a single image
community.docker.docker_image_info:
name: pacur/centos-7
@ -71,20 +72,68 @@ images:
returned: always
type: list
elements: dict
sample: [{"Architecture": "amd64", "Author": "", "Comment": "", "Config": {"AttachStderr": false, "AttachStdin": false,
"AttachStdout": false, "Cmd": ["/etc/docker/registry/config.yml"], "Domainname": "", "Entrypoint": ["/bin/registry"],
"Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"], "ExposedPorts": {"5000/tcp": {}},
"Hostname": "e5c68db50333", "Image": "c72dce2618dc8f7b794d2b2c2b1e64e0205ead5befc294f8111da23bd6a2c799", "Labels": {},
"OnBuild": [], "OpenStdin": false, "StdinOnce": false, "Tty": false, "User": "", "Volumes": {"/var/lib/registry": {}},
"WorkingDir": ""}, "Container": "e83a452b8fb89d78a25a6739457050131ca5c863629a47639530d9ad2008d610", "ContainerConfig": {
"AttachStderr": false, "AttachStdin": false, "AttachStdout": false, "Cmd": ["/bin/sh", "-c", '#(nop) CMD ["/etc/docker/registry/config.yml"]'],
"Domainname": "", "Entrypoint": ["/bin/registry"], "Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],
"ExposedPorts": {"5000/tcp": {}}, "Hostname": "e5c68db50333", "Image": "c72dce2618dc8f7b794d2b2c2b1e64e0205ead5befc294f8111da23bd6a2c799",
"Labels": {}, "OnBuild": [], "OpenStdin": false, "StdinOnce": false, "Tty": false, "User": "", "Volumes": {"/var/lib/registry": {}},
"WorkingDir": ""}, "Created": "2016-03-08T21:08:15.399680378Z", "DockerVersion": "1.9.1", "GraphDriver": {"Data": null,
"Name": "aufs"}, "Id": "53773d8552f07b730f3e19979e32499519807d67b344141d965463a950a66e08", "Name": "registry:2",
"Os": "linux", "Parent": "f0b1f729f784b755e7bf9c8c2e65d8a0a35a533769c2588f02895f6781ac0805", "RepoDigests": [], "RepoTags": [
"registry:2"], "Size": 0, "VirtualSize": 165808884}]
sample: [
{
"Architecture": "amd64",
"Author": "",
"Comment": "",
"Config": {
"AttachStderr": false,
"AttachStdin": false,
"AttachStdout": false,
"Cmd": ["/etc/docker/registry/config.yml"],
"Domainname": "",
"Entrypoint": ["/bin/registry"],
"Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],
"ExposedPorts": {"5000/tcp": {}},
"Hostname": "e5c68db50333",
"Image": "c72dce2618dc8f7b794d2b2c2b1e64e0205ead5befc294f8111da23bd6a2c799",
"Labels": {},
"OnBuild": [],
"OpenStdin": false,
"StdinOnce": false,
"Tty": false,
"User": "",
"Volumes": {"/var/lib/registry": {}},
"WorkingDir": "",
},
"Container": "e83a452b8fb89d78a25a6739457050131ca5c863629a47639530d9ad2008d610",
"ContainerConfig": {
"AttachStderr": false,
"AttachStdin": false,
"AttachStdout": false,
"Cmd": ["/bin/sh", "-c", '#(nop) CMD ["/etc/docker/registry/config.yml"]'],
"Domainname": "",
"Entrypoint": ["/bin/registry"],
"Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],
"ExposedPorts": {"5000/tcp": {}},
"Hostname": "e5c68db50333",
"Image": "c72dce2618dc8f7b794d2b2c2b1e64e0205ead5befc294f8111da23bd6a2c799",
"Labels": {},
"OnBuild": [],
"OpenStdin": false,
"StdinOnce": false,
"Tty": false,
"User": "",
"Volumes": {"/var/lib/registry": {}},
"WorkingDir": "",
},
"Created": "2016-03-08T21:08:15.399680378Z",
"DockerVersion": "1.9.1",
"GraphDriver": {
"Data": null,
"Name": "aufs",
},
"Id": "53773d8552f07b730f3e19979e32499519807d67b344141d965463a950a66e08",
"Name": "registry:2",
"Os": "linux",
"Parent": "f0b1f729f784b755e7bf9c8c2e65d8a0a35a533769c2588f02895f6781ac0805",
"RepoDigests": [],
"RepoTags": ["registry:2"],
"Size": 0,
"VirtualSize": 165808884,
},
]
"""
import traceback

View File

@ -52,6 +52,7 @@ seealso:
"""
EXAMPLES = r"""
---
- name: Load all image(s) from the given tar file
community.docker.docker_image_load:
path: /path/to/images.tar

View File

@ -75,6 +75,7 @@ seealso:
"""
EXAMPLES = r"""
---
- name: Pull an image
community.docker.docker_image_pull:
name: pacur/centos-7

View File

@ -57,6 +57,7 @@ seealso:
"""
EXAMPLES = r"""
---
- name: Push an image
community.docker.docker_image_push:
name: registry.example.com:5000/repo/image

View File

@ -68,6 +68,7 @@ seealso:
"""
EXAMPLES = r"""
---
- name: Remove an image
community.docker.docker_image_remove:
name: pacur/centos-7

View File

@ -76,6 +76,7 @@ seealso:
"""
EXAMPLES = r"""
---
- name: Tag Python 3.12 image with two new names
community.docker.docker_image_tag:
name: python:3.12

View File

@ -85,6 +85,7 @@ author:
"""
EXAMPLES = r"""
---
- name: Log into DockerHub
community.docker.docker_login:
username: docker

View File

@ -203,6 +203,7 @@ requirements:
"""
EXAMPLES = r"""
---
- name: Create a network
community.docker.docker_network:
name: network_one

View File

@ -40,6 +40,7 @@ requirements:
"""
EXAMPLES = r"""
---
- name: Get infos on network
community.docker.docker_network_info:
name: mydata
@ -68,10 +69,32 @@ network:
- Will be V(none) if network does not exist.
returned: always
type: dict
sample: {"Attachable": false, "ConfigFrom": {"Network": ""}, "ConfigOnly": false, "Containers": {}, "Created": "2018-12-07T01:47:51.250835114-06:00",
"Driver": "bridge", "EnableIPv6": false, "IPAM": {"Config": [{"Gateway": "192.168.96.1", "Subnet": "192.168.96.0/20"}],
"Driver": "default", "Options": null}, "Id": "0856968545f22026c41c2c7c3d448319d3b4a6a03a40b148b3ac4031696d1c0a", "Ingress": false,
"Internal": false, "Labels": {}, "Name": "ansible-test-f2700bba", "Options": {}, "Scope": "local"}
sample: {
"Attachable": false,
"ConfigFrom": {"Network": ""},
"ConfigOnly": false,
"Containers": {},
"Created": "2018-12-07T01:47:51.250835114-06:00",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Config": [
{
"Gateway": "192.168.96.1",
"Subnet": "192.168.96.0/20",
},
],
"Driver": "default",
"Options": null,
},
"Id": "0856968545f22026c41c2c7c3d448319d3b4a6a03a40b148b3ac4031696d1c0a",
"Ingress": false,
"Internal": false,
"Labels": {},
"Name": "ansible-test-f2700bba",
"Options": {},
"Scope": "local",
}
"""
import traceback

View File

@ -90,6 +90,7 @@ author:
"""
EXAMPLES = r"""
---
- name: Set node role
community.docker.docker_node:
hostname: mynode

View File

@ -52,6 +52,7 @@ requirements:
"""
EXAMPLES = r"""
---
- name: Get info on all nodes
community.docker.docker_node_info:
register: result

View File

@ -86,6 +86,7 @@ requirements:
"""
EXAMPLES = r"""
---
- name: Install a plugin
community.docker.docker_plugin:
plugin_name: plugin_one

View File

@ -114,6 +114,7 @@ requirements:
"""
EXAMPLES = r"""
---
- name: Prune containers older than 24h
community.docker.docker_prune:
containers: true

View File

@ -103,6 +103,7 @@ author:
"""
EXAMPLES = r"""
---
- name: Create secret foo (from a file on the control machine)
community.docker.docker_secret:
name: foo

View File

@ -128,6 +128,7 @@ stack_spec_diff:
"""
EXAMPLES = r"""
---
- name: Deploy stack from a compose file
community.docker.docker_stack:
state: present

View File

@ -66,6 +66,7 @@ results:
"""
EXAMPLES = r"""
---
- name: Shows stack info
community.docker.docker_stack_info:
register: result

View File

@ -59,14 +59,21 @@ results:
description:
- List of dictionaries containing the list of tasks associated to a stack name.
sample:
- {"CurrentState": "Running", "DesiredState": "Running", "Error": "", "ID": "7wqv6m02ugkw", "Image": "busybox", "Name": "test_stack.1",
"Node": "swarm", "Ports": ""}
- CurrentState: Running
DesiredState: Running
Error: ""
ID: 7wqv6m02ugkw
Image: busybox
Name: test_stack.1
Node: swarm
Ports: ""
returned: always
type: list
elements: dict
"""
EXAMPLES = r"""
---
- name: Shows stack info
community.docker.docker_stack_task_info:
name: test_stack

View File

@ -206,6 +206,7 @@ author:
"""
EXAMPLES = r"""
---
- name: Init a new swarm with default parameters
community.docker.docker_swarm:
state: present

View File

@ -89,6 +89,7 @@ requirements:
"""
EXAMPLES = r"""
---
- name: Get info on Docker Swarm
community.docker.docker_swarm_info:
ignore_errors: true

View File

@ -694,6 +694,7 @@ rebuilt:
"""
EXAMPLES = r"""
---
- name: Set command and arguments
community.docker.docker_swarm_service:
name: myservice

View File

@ -41,6 +41,7 @@ requirements:
"""
EXAMPLES = r"""
---
- name: Get info from a service
community.docker.docker_swarm_service_info:
name: myservice

View File

@ -91,6 +91,7 @@ requirements:
"""
EXAMPLES = r"""
---
- name: Create a volume
community.docker.docker_volume:
name: volume_one

View File

@ -38,6 +38,7 @@ requirements:
"""
EXAMPLES = r"""
---
- name: Get infos on volume
community.docker.docker_volume_info:
name: mydata

View File

@ -4,8 +4,8 @@
# SPDX-License-Identifier: GPL-3.0-or-later
collections:
- ansible.posix
- community.crypto
- community.general
- community.internal_test_tools
- community.library_inventory_filtering_v1
- ansible.posix
- community.crypto
- community.general
- community.internal_test_tools
- community.library_inventory_filtering_v1

View File

@ -8,41 +8,41 @@
serial: 1
tasks:
### raw with unicode arg and output
### raw with unicode arg and output
- name: raw with unicode arg and output
raw: echo 汉语
register: command
- name: check output of raw with unicode arg and output
assert:
that:
- "'汉语' in command.stdout"
- command is changed # as of 2.2, raw should default to changed: true for consistency w/ shell/command/script modules
- name: raw with unicode arg and output
raw: echo 汉语
register: command
- name: check output of raw with unicode arg and output
assert:
that:
- "'汉语' in command.stdout"
- command is changed # as of 2.2, raw should default to changed: true for consistency w/ shell/command/script modules
### copy local file with unicode filename and content
### copy local file with unicode filename and content
- name: create local file with unicode filename and content
local_action: lineinfile dest={{ local_tmp }}-汉语/汉语.txt create=true line=汉语
- name: remove remote file with unicode filename and content
action: "{{ action_prefix }}file path={{ remote_tmp }}-汉语/汉语.txt state=absent"
- name: create remote directory with unicode name
action: "{{ action_prefix }}file path={{ remote_tmp }}-汉语 state=directory"
- name: copy local file with unicode filename and content
action: "{{ action_prefix }}copy src={{ local_tmp }}-汉语/汉语.txt dest={{ remote_tmp }}-汉语/汉语.txt"
- name: create local file with unicode filename and content
local_action: lineinfile dest={{ local_tmp }}-汉语/汉语.txt create=true line=汉语
- name: remove remote file with unicode filename and content
action: "{{ action_prefix }}file path={{ remote_tmp }}-汉语/汉语.txt state=absent"
- name: create remote directory with unicode name
action: "{{ action_prefix }}file path={{ remote_tmp }}-汉语 state=directory"
- name: copy local file with unicode filename and content
action: "{{ action_prefix }}copy src={{ local_tmp }}-汉语/汉语.txt dest={{ remote_tmp }}-汉语/汉语.txt"
### fetch remote file with unicode filename and content
### fetch remote file with unicode filename and content
- name: remove local file with unicode filename and content
local_action: file path={{ local_tmp }}-汉语/汉语.txt state=absent
- name: fetch remote file with unicode filename and content
fetch: src={{ remote_tmp }}-汉语/汉语.txt dest={{ local_tmp }}-汉语/汉语.txt fail_on_missing=true validate_checksum=true flat=true
- name: remove local file with unicode filename and content
local_action: file path={{ local_tmp }}-汉语/汉语.txt state=absent
- name: fetch remote file with unicode filename and content
fetch: src={{ remote_tmp }}-汉语/汉语.txt dest={{ local_tmp }}-汉语/汉语.txt fail_on_missing=true validate_checksum=true flat=true
### remove local and remote temp files
### remove local and remote temp files
- name: remove local temp file
local_action: file path={{ local_tmp }}-汉语 state=absent
- name: remove remote temp file
action: "{{ action_prefix }}file path={{ remote_tmp }}-汉语 state=absent"
- name: remove local temp file
local_action: file path={{ local_tmp }}-汉语 state=absent
- name: remove remote temp file
action: "{{ action_prefix }}file path={{ remote_tmp }}-汉语 state=absent"
### test wait_for_connection plugin
- ansible.builtin.wait_for_connection:
### test wait_for_connection plugin
- ansible.builtin.wait_for_connection:

View File

@ -67,4 +67,4 @@
- present_1.images[0].Tag == (docker_test_image_alpine | split(':') | last)
- present_1.warnings | default([]) | select('regex', ' Please report this at ') | length == 0
- >-
("container " ~ pname ~ '-' ~ cname ~ "-1 exited (0)") in present_1.msg
("container " ~ pname ~ '-' ~ cname ~ "-1 exited (0)") in present_1.msg

View File

@ -4,313 +4,131 @@
# SPDX-License-Identifier: GPL-3.0-or-later
- block:
- shell: "docker info --format '{% raw %}{{json .}}{% endraw %}' | python -m json.tool"
- shell: "docker info --format '{% raw %}{{json .}}{% endraw %}' | python -m json.tool"
- name: Make sure we're not already using Docker swarm
docker_swarm:
state: absent
force: true
- name: Make sure we're not already using Docker swarm
docker_swarm:
state: absent
force: true
- shell: "docker info --format '{% raw %}{{json .}}{% endraw %}' | python -m json.tool"
- shell: "docker info --format '{% raw %}{{json .}}{% endraw %}' | python -m json.tool"
- name: Create a Swarm cluster
docker_swarm:
name: default
state: present
advertise_addr: "{{ ansible_default_ipv4.address | default('127.0.0.1') }}"
- name: Parameter name should be required
docker_config:
state: present
ignore_errors: true
register: output
- name: Assert failure when called with no name
assert:
that:
- 'output is failed'
- 'output.msg == "missing required arguments: name"'
- name: Test parameters
docker_config:
name: foo
state: present
ignore_errors: true
register: output
- name: Assert failure when called with no data
assert:
that:
- 'output is failed'
- 'output.msg == "state is present but any of the following are missing: data, data_src"'
- name: Create config
docker_config:
name: db_password
data: opensesame!
state: present
register: output
- name: Create variable config_id
set_fact:
config_id: "{{ output.config_id }}"
- name: Inspect config
command: "docker config inspect {{ config_id }}"
register: inspect
ignore_errors: true
- debug:
var: inspect
- name: Assert config creation succeeded
assert:
that:
- "'db_password' in inspect.stdout"
- "'ansible_key' in inspect.stdout"
when: inspect is not failed
- assert:
that:
- "'is too new. Maximum supported API version is' in inspect.stderr"
when: inspect is failed
- name: Create config again
docker_config:
name: db_password
data: opensesame!
state: present
register: output
- name: Assert create config is idempotent
assert:
that:
- output is not changed
- name: Write config into file
copy:
dest: "{{ remote_tmp_dir }}/data"
content: |-
opensesame!
- name: Create config again (from file)
docker_config:
name: db_password
data_src: "{{ remote_tmp_dir }}/data"
state: present
register: output
- name: Assert create config is idempotent
assert:
that:
- output is not changed
- name: Create config again (base64)
docker_config:
name: db_password
data: b3BlbnNlc2FtZSE=
data_is_b64: true
state: present
register: output
- name: Assert create config (base64) is idempotent
assert:
that:
- output is not changed
- name: Update config
docker_config:
name: db_password
data: newpassword!
state: present
register: output
- name: Assert config was updated
assert:
that:
- output is changed
- output.config_id != config_id
- name: Remove config
docker_config:
name: db_password
state: absent
- name: Check that config is removed
command: "docker config inspect {{ config_id }}"
register: output
ignore_errors: true
- name: Assert config was removed
assert:
that:
- output is failed
- name: Remove config
docker_config:
name: db_password
state: absent
register: output
- name: Assert remove config is idempotent
assert:
that:
- output is not changed
# Rolling update
- name: Create rolling config
docker_config:
name: rolling_password
data: opensesame!
rolling_versions: true
state: present
register: original_output
- name: Create variable config_id
set_fact:
config_id: "{{ original_output.config_id }}"
- name: Inspect config
command: "docker config inspect {{ config_id }}"
register: inspect
ignore_errors: true
- debug:
var: inspect
- name: Assert config creation succeeded
assert:
that:
- "'rolling_password' in inspect.stdout"
- "'ansible_key' in inspect.stdout"
- "'ansible_version' in inspect.stdout"
- original_output.config_name == 'rolling_password_v1'
when: inspect is not failed
- assert:
that:
- "'is too new. Maximum supported API version is' in inspect.stderr"
when: inspect is failed
- name: Create config again
docker_config:
name: rolling_password
data: newpassword!
rolling_versions: true
state: present
register: new_output
- name: Assert that new version is created
assert:
that:
- new_output is changed
- new_output.config_id != original_output.config_id
- new_output.config_name != original_output.config_name
- new_output.config_name == 'rolling_password_v2'
- name: Remove rolling configs
docker_config:
name: rolling_password
rolling_versions: true
state: absent
- name: Check that config is removed
command: "docker config inspect {{ original_output.config_id }}"
register: output
ignore_errors: true
- name: Assert config was removed
assert:
that:
- output is failed
- name: Check that config is removed
command: "docker config inspect {{ new_output.config_id }}"
register: output
ignore_errors: true
- name: Assert config was removed
assert:
that:
- output is failed
# template_driver tests
- when: docker_py_version is version('5.0.3', '>=') and docker_api_version is version('1.37', '>=')
block:
- name: Create regular config
docker_config:
name: db_password
data: opensesame!
- name: Create a Swarm cluster
docker_swarm:
name: default
state: present
advertise_addr: "{{ ansible_default_ipv4.address | default('127.0.0.1') }}"
- name: Update config with template_driver
- name: Parameter name should be required
docker_config:
name: db_password
data: opensesame!
template_driver: golang
state: present
register: output
- name: Assert config was updated
assert:
that:
- output is changed
- name: Invalid template_driver
docker_config:
name: db_password
data: opensesame!
template_driver: "not a template driver"
state: present
ignore_errors: true
register: output
- name: Assert failure when called with invalid template_driver
- name: Assert failure when called with no name
assert:
that:
- 'output is failed'
- 'output.msg == "value of template_driver must be one of: golang, got: not a template driver"'
- 'output is failed'
- 'output.msg == "missing required arguments: name"'
- name: Test parameters
docker_config:
name: foo
state: present
ignore_errors: true
register: output
- name: Assert failure when called with no data
assert:
that:
- 'output is failed'
- 'output.msg == "state is present but any of the following are missing: data, data_src"'
- name: Create config
docker_config:
name: db_password
data: opensesame!
state: present
register: output
- name: Create variable config_id
set_fact:
config_id: "{{ output.config_id }}"
- name: Inspect config
command: "docker config inspect {{ config_id }}"
register: inspect
ignore_errors: true
- debug:
var: inspect
- name: Assert config creation succeeded
assert:
that:
- "'db_password' in inspect.stdout"
- "'ansible_key' in inspect.stdout"
when: inspect is not failed
- assert:
that:
- "'is too new. Maximum supported API version is' in inspect.stderr"
when: inspect is failed
- name: Create config again
docker_config:
name: db_password
data: opensesame!
template_driver: golang
state: present
register: output
- name: Assert create config is idempotent
assert:
that:
- output is not changed
- output is not changed
# data is the docker swarm's name
- name: Update config with template data
- name: Write config into file
copy:
dest: "{{ remote_tmp_dir }}/data"
content: |-
opensesame!
- name: Create config again (from file)
docker_config:
name: db_password
data: "{{ '{{' }} .Service.Name {{ '}}' }}"
template_driver: golang
data_src: "{{ remote_tmp_dir }}/data"
state: present
register: output
- name: Inspect config
command: "docker config inspect {{ output.config_id }}"
register: inspect
- name: Show inspection result
debug:
var: inspect
- name: Assert config creation succeeded
- name: Assert create config is idempotent
assert:
that:
- "'db_password' in inspect.stdout"
- "'ansible_key' in inspect.stdout"
# According to the API docs, 'Data' is "Base64-url-safe-encoded (RFC 4648) config data."
- "'\"Data\": \"e3sgLlNlcnZpY2UuTmFtZSB9fQ==\"' in inspect.stdout"
- "'Templating' in inspect.stdout"
- "'\"Name\": \"golang\"' in inspect.stdout"
- output is not changed
- name: Create config again (base64)
docker_config:
name: db_password
data: b3BlbnNlc2FtZSE=
data_is_b64: true
state: present
register: output
- name: Assert create config (base64) is idempotent
assert:
that:
- output is not changed
- name: Update config
docker_config:
name: db_password
data: newpassword!
state: present
register: output
- name: Assert config was updated
assert:
that:
- output is changed
- output.config_id != config_id
- name: Remove config
docker_config:
@ -318,7 +136,7 @@
state: absent
- name: Check that config is removed
command: "docker config inspect {{ output.config_id }}"
command: "docker config inspect {{ config_id }}"
register: output
ignore_errors: true
@ -327,8 +145,190 @@
that:
- output is failed
- name: Remove config
docker_config:
name: db_password
state: absent
register: output
- name: Assert remove config is idempotent
assert:
that:
- output is not changed
# Rolling update
- name: Create rolling config
docker_config:
name: rolling_password
data: opensesame!
rolling_versions: true
state: present
register: original_output
- name: Create variable config_id
set_fact:
config_id: "{{ original_output.config_id }}"
- name: Inspect config
command: "docker config inspect {{ config_id }}"
register: inspect
ignore_errors: true
- debug:
var: inspect
- name: Assert config creation succeeded
assert:
that:
- "'rolling_password' in inspect.stdout"
- "'ansible_key' in inspect.stdout"
- "'ansible_version' in inspect.stdout"
- original_output.config_name == 'rolling_password_v1'
when: inspect is not failed
- assert:
that:
- "'is too new. Maximum supported API version is' in inspect.stderr"
when: inspect is failed
- name: Create config again
docker_config:
name: rolling_password
data: newpassword!
rolling_versions: true
state: present
register: new_output
- name: Assert that new version is created
assert:
that:
- new_output is changed
- new_output.config_id != original_output.config_id
- new_output.config_name != original_output.config_name
- new_output.config_name == 'rolling_password_v2'
- name: Remove rolling configs
docker_config:
name: rolling_password
rolling_versions: true
state: absent
- name: Check that config is removed
command: "docker config inspect {{ original_output.config_id }}"
register: output
ignore_errors: true
- name: Assert config was removed
assert:
that:
- output is failed
- name: Check that config is removed
command: "docker config inspect {{ new_output.config_id }}"
register: output
ignore_errors: true
- name: Assert config was removed
assert:
that:
- output is failed
# template_driver tests
- when: docker_py_version is version('5.0.3', '>=') and docker_api_version is version('1.37', '>=')
block:
- name: Create regular config
docker_config:
name: db_password
data: opensesame!
state: present
- name: Update config with template_driver
docker_config:
name: db_password
data: opensesame!
template_driver: golang
state: present
register: output
- name: Assert config was updated
assert:
that:
- output is changed
- name: Invalid template_driver
docker_config:
name: db_password
data: opensesame!
template_driver: "not a template driver"
state: present
ignore_errors: true
register: output
- name: Assert failure when called with invalid template_driver
assert:
that:
- 'output is failed'
- 'output.msg == "value of template_driver must be one of: golang, got: not a template driver"'
- name: Create config again
docker_config:
name: db_password
data: opensesame!
template_driver: golang
state: present
register: output
- name: Assert create config is idempotent
assert:
that:
- output is not changed
# data is the docker swarm's name
- name: Update config with template data
docker_config:
name: db_password
data: "{{ '{{' }} .Service.Name {{ '}}' }}"
template_driver: golang
state: present
register: output
- name: Inspect config
command: "docker config inspect {{ output.config_id }}"
register: inspect
- name: Show inspection result
debug:
var: inspect
- name: Assert config creation succeeded
assert:
that:
- "'db_password' in inspect.stdout"
- "'ansible_key' in inspect.stdout"
# According to the API docs, 'Data' is "Base64-url-safe-encoded (RFC 4648) config data."
- "'\"Data\": \"e3sgLlNlcnZpY2UuTmFtZSB9fQ==\"' in inspect.stdout"
- "'Templating' in inspect.stdout"
- "'\"Name\": \"golang\"' in inspect.stdout"
- name: Remove config
docker_config:
name: db_password
state: absent
- name: Check that config is removed
command: "docker config inspect {{ output.config_id }}"
register: output
ignore_errors: true
- name: Assert config was removed
assert:
that:
- output is failed
always:
- name: Remove a Swarm cluster
docker_swarm:
state: absent
force: true
- name: Remove a Swarm cluster
docker_swarm:
state: absent
force: true

View File

@ -56,9 +56,9 @@
- assert:
that:
- value_1 is changed
- value_2 is not changed
- value_3 is changed
- value_1 is changed
- value_2 is not changed
- value_3 is changed
####################################################################
## list ############################################################
@ -71,8 +71,8 @@
name: "{{ cname }}"
state: started
dns_servers:
- 1.1.1.1
- 8.8.8.8
- 1.1.1.1
- 8.8.8.8
register: list_1
- name: list (change, ignore)
@ -82,7 +82,7 @@
name: "{{ cname }}"
state: started
dns_servers:
- 9.9.9.9
- 9.9.9.9
force_kill: true
comparisons:
dns_servers: ignore
@ -95,7 +95,7 @@
name: "{{ cname }}"
state: started
dns_servers:
- 9.9.9.9
- 9.9.9.9
force_kill: true
comparisons:
dns_servers: strict
@ -110,9 +110,9 @@
- assert:
that:
- list_1 is changed
- list_2 is not changed
- list_3 is changed
- list_1 is changed
- list_2 is not changed
- list_3 is changed
####################################################################
## set #############################################################
@ -125,8 +125,8 @@
name: "{{ cname }}"
state: started
groups:
- "1010"
- "1011"
- "1010"
- "1011"
register: set_1
- name: set (change, ignore)
@ -136,9 +136,9 @@
name: "{{ cname }}"
state: started
groups:
- "1010"
- "1011"
- "1012"
- "1010"
- "1011"
- "1012"
force_kill: true
comparisons:
groups: ignore
@ -151,9 +151,9 @@
name: "{{ cname }}"
state: started
groups:
- "1010"
- "1011"
- "1012"
- "1010"
- "1011"
- "1012"
force_kill: true
comparisons:
groups: allow_more_present
@ -166,8 +166,8 @@
name: "{{ cname }}"
state: started
groups:
- "1010"
- "1012"
- "1010"
- "1012"
force_kill: true
comparisons:
groups: allow_more_present
@ -180,8 +180,8 @@
name: "{{ cname }}"
state: started
groups:
- "1010"
- "1012"
- "1010"
- "1012"
force_kill: true
comparisons:
groups: strict
@ -196,11 +196,11 @@
- assert:
that:
- set_1 is changed
- set_2 is not changed
- set_3 is changed
- set_4 is not changed
- set_5 is changed
- set_1 is changed
- set_2 is not changed
- set_3 is changed
- set_4 is not changed
- set_5 is changed
####################################################################
## set(dict) #######################################################
@ -213,8 +213,8 @@
name: "{{ cname }}"
state: started
devices:
- "/dev/random:/dev/virt-random:rwm"
- "/dev/urandom:/dev/virt-urandom:rwm"
- "/dev/random:/dev/virt-random:rwm"
- "/dev/urandom:/dev/virt-urandom:rwm"
register: set_dict_1
- name: set(dict) (change, ignore)
@ -224,9 +224,9 @@
name: "{{ cname }}"
state: started
devices:
- "/dev/random:/dev/virt-random:rwm"
- "/dev/urandom:/dev/virt-urandom:rwm"
- "/dev/null:/dev/virt-null:rwm"
- "/dev/random:/dev/virt-random:rwm"
- "/dev/urandom:/dev/virt-urandom:rwm"
- "/dev/null:/dev/virt-null:rwm"
force_kill: true
comparisons:
devices: ignore
@ -239,9 +239,9 @@
name: "{{ cname }}"
state: started
devices:
- "/dev/random:/dev/virt-random:rwm"
- "/dev/urandom:/dev/virt-urandom:rwm"
- "/dev/null:/dev/virt-null:rwm"
- "/dev/random:/dev/virt-random:rwm"
- "/dev/urandom:/dev/virt-urandom:rwm"
- "/dev/null:/dev/virt-null:rwm"
force_kill: true
comparisons:
devices: allow_more_present
@ -254,8 +254,8 @@
name: "{{ cname }}"
state: started
devices:
- "/dev/random:/dev/virt-random:rwm"
- "/dev/null:/dev/virt-null:rwm"
- "/dev/random:/dev/virt-random:rwm"
- "/dev/null:/dev/virt-null:rwm"
force_kill: true
comparisons:
devices: allow_more_present
@ -268,8 +268,8 @@
name: "{{ cname }}"
state: started
devices:
- "/dev/random:/dev/virt-random:rwm"
- "/dev/null:/dev/virt-null:rwm"
- "/dev/random:/dev/virt-random:rwm"
- "/dev/null:/dev/virt-null:rwm"
force_kill: true
comparisons:
devices: strict
@ -284,11 +284,11 @@
- assert:
that:
- set_dict_1 is changed
- set_dict_2 is not changed
- set_dict_3 is changed
- set_dict_4 is not changed
- set_dict_5 is changed
- set_dict_1 is changed
- set_dict_2 is not changed
- set_dict_3 is changed
- set_dict_4 is not changed
- set_dict_5 is changed
####################################################################
## dict ############################################################
@ -372,11 +372,11 @@
- assert:
that:
- dict_1 is changed
- dict_2 is not changed
- dict_3 is changed
- dict_4 is not changed
- dict_5 is changed
- dict_1 is changed
- dict_2 is not changed
- dict_3 is changed
- dict_4 is not changed
- dict_5 is changed
####################################################################
## wildcard ########################################################
@ -460,7 +460,7 @@
- assert:
that:
- wildcard_1 is changed
- wildcard_2 is not changed
- wildcard_3 is changed
- wildcard_4 is not changed
- wildcard_1 is changed
- wildcard_2 is not changed
- wildcard_3 is changed
- wildcard_4 is not changed

View File

@ -60,10 +60,10 @@
- assert:
that:
- start_1 is changed
- start_2 is changed
- start_3 is not changed
- start_4 is not changed
- start_1 is changed
- start_2 is changed
- start_3 is not changed
- start_4 is not changed
####################################################################
## container_default_behavior: no_defaults #########################
@ -116,7 +116,7 @@
- assert:
that:
- start_1 is changed
- start_2 is changed
- start_3 is not changed
- start_4 is not changed
- start_1 is changed
- start_2 is changed
- start_3 is not changed
- start_4 is not changed

View File

@ -22,8 +22,8 @@
- name: Get image ID of {{ docker_test_image_hello_world }} and {{ docker_test_image_alpine }} images
docker_image_info:
name:
- "{{ docker_test_image_hello_world }}"
- "{{ docker_test_image_alpine }}"
- "{{ docker_test_image_hello_world }}"
- "{{ docker_test_image_alpine }}"
register: image_info
- assert:

View File

@ -29,13 +29,13 @@
name: "{{ cname }}"
state: started
mounts:
- source: /tmp
target: /tmp
type: bind
- source: /
target: /whatever
type: bind
read_only: false
- source: /tmp
target: /tmp
type: bind
- source: /
target: /whatever
type: bind
read_only: false
register: mounts_1
- name: mounts (idempotency)
@ -45,13 +45,13 @@
name: "{{ cname }}"
state: started
mounts:
- source: /
target: /whatever
type: bind
read_only: false
- source: /tmp
target: /tmp
type: bind
- source: /
target: /whatever
type: bind
read_only: false
- source: /tmp
target: /tmp
type: bind
register: mounts_2
- name: mounts (less mounts)
@ -61,9 +61,9 @@
name: "{{ cname }}"
state: started
mounts:
- source: /tmp
target: /tmp
type: bind
- source: /tmp
target: /tmp
type: bind
register: mounts_3
- name: mounts (more mounts)
@ -73,13 +73,13 @@
name: "{{ cname }}"
state: started
mounts:
- source: /tmp
target: /tmp
type: bind
- source: /tmp
target: /somewhereelse
type: bind
read_only: true
- source: /tmp
target: /tmp
type: bind
- source: /tmp
target: /somewhereelse
type: bind
read_only: true
force_kill: true
register: mounts_4
@ -90,13 +90,13 @@
name: "{{ cname }}"
state: started
mounts:
- source: /tmp
target: /tmp
type: bind
- source: /tmp
target: /somewhereelse
type: bind
read_only: false
- source: /tmp
target: /tmp
type: bind
- source: /tmp
target: /somewhereelse
type: bind
read_only: false
force_kill: true
register: mounts_5
@ -107,13 +107,13 @@
name: "{{ cname }}"
state: started
mounts:
- source: /home
target: /x
type: bind
- source: /etc
target: /x
type: bind
read_only: false
- source: /home
target: /x
type: bind
- source: /etc
target: /x
type: bind
read_only: false
force_kill: true
register: mounts_6
ignore_errors: true
@ -151,15 +151,15 @@
- 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"
- mounts_7 is changed
- mounts_8 is not changed
- 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"
- mounts_7 is changed
- mounts_8 is not changed
####################################################################
## tmpfs ###########################################################
@ -172,14 +172,14 @@
name: "{{ cname }}"
state: started
mounts:
- target: /cache1
type: tmpfs
tmpfs_mode: "1777"
tmpfs_size: "1GB"
- target: /cache2
type: tmpfs
tmpfs_mode: "1777"
tmpfs_size: "1GB"
- target: /cache1
type: tmpfs
tmpfs_mode: "1777"
tmpfs_size: "1GB"
- target: /cache2
type: tmpfs
tmpfs_mode: "1777"
tmpfs_size: "1GB"
force_kill: true
register: tmpfs_1
@ -190,14 +190,14 @@
name: "{{ cname }}"
state: started
mounts:
- target: /cache2
type: tmpfs
tmpfs_mode: "1777"
tmpfs_size: "1GB"
- target: /cache1
type: tmpfs
tmpfs_mode: "1777"
tmpfs_size: "1GB"
- target: /cache2
type: tmpfs
tmpfs_mode: "1777"
tmpfs_size: "1GB"
- target: /cache1
type: tmpfs
tmpfs_mode: "1777"
tmpfs_size: "1GB"
force_kill: true
register: tmpfs_2
@ -208,18 +208,18 @@
name: "{{ cname }}"
state: started
mounts:
- target: /cache1
type: tmpfs
tmpfs_mode: "1777"
tmpfs_size: "1GB"
- target: /cache2
type: tmpfs
tmpfs_mode: "1777"
tmpfs_size: "1GB"
- target: /cache3
type: tmpfs
tmpfs_mode: "1777"
tmpfs_size: "1GB"
- target: /cache1
type: tmpfs
tmpfs_mode: "1777"
tmpfs_size: "1GB"
- target: /cache2
type: tmpfs
tmpfs_mode: "1777"
tmpfs_size: "1GB"
- target: /cache3
type: tmpfs
tmpfs_mode: "1777"
tmpfs_size: "1GB"
force_kill: true
register: tmpfs_3
@ -230,10 +230,10 @@
name: "{{ cname }}"
state: started
mounts:
- target: /cache1
type: tmpfs
tmpfs_mode: "1700"
tmpfs_size: "1GB"
- target: /cache1
type: tmpfs
tmpfs_mode: "1700"
tmpfs_size: "1GB"
force_kill: true
register: tmpfs_4
@ -244,10 +244,10 @@
name: "{{ cname }}"
state: started
mounts:
- target: /cache1
type: tmpfs
tmpfs_mode: "1700"
tmpfs_size: "2GB"
- target: /cache1
type: tmpfs
tmpfs_mode: "1700"
tmpfs_size: "2GB"
force_kill: true
register: tmpfs_5
@ -260,11 +260,11 @@
- assert:
that:
- tmpfs_1 is changed
- tmpfs_2 is not changed
- tmpfs_3 is changed
- tmpfs_4 is changed
- tmpfs_5 is changed
- tmpfs_1 is changed
- tmpfs_2 is not changed
- tmpfs_3 is changed
- tmpfs_4 is changed
- tmpfs_5 is changed
####################################################################
## mounts + volumes ################################################
@ -277,12 +277,12 @@
name: "{{ cname }}"
state: started
mounts:
- source: /
target: /whatever
type: bind
read_only: true
- source: /
target: /whatever
type: bind
read_only: true
volumes:
- /tmp:/tmp
- /tmp:/tmp
register: mounts_volumes_1
- name: mounts + volumes (idempotency)
@ -292,12 +292,12 @@
name: "{{ cname }}"
state: started
mounts:
- source: /
target: /whatever
type: bind
read_only: true
- source: /
target: /whatever
type: bind
read_only: true
volumes:
- /tmp:/tmp
- /tmp:/tmp
register: mounts_volumes_2
- name: mounts + volumes (switching)
@ -307,12 +307,12 @@
name: "{{ cname }}"
state: started
mounts:
- source: /tmp
target: /tmp
type: bind
read_only: false
- source: /tmp
target: /tmp
type: bind
read_only: false
volumes:
- /:/whatever:ro
- /:/whatever:ro
force_kill: true
register: mounts_volumes_3
@ -323,12 +323,12 @@
name: "{{ cname }}"
state: started
mounts:
- source: /tmp
target: /tmp
type: bind
read_only: false
- source: /tmp
target: /tmp
type: bind
read_only: false
volumes:
- /tmp:/tmp
- /tmp:/tmp
force_kill: true
register: mounts_volumes_4
ignore_errors: true
@ -342,11 +342,11 @@
- 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"
- 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"
####################################################################
## volume_driver ###################################################
@ -389,9 +389,9 @@
- assert:
that:
- volume_driver_1 is changed
- volume_driver_2 is not changed
- volume_driver_3 is changed
- volume_driver_1 is changed
- volume_driver_2 is not changed
- volume_driver_3 is changed
####################################################################
## volumes #########################################################
@ -404,9 +404,9 @@
name: "{{ cname }}"
state: started
volumes:
- "/tmp:/tmp"
- "/:/whatever:rw,z"
- "/anon:rw"
- "/tmp:/tmp"
- "/:/whatever:rw,z"
- "/anon:rw"
register: volumes_1
- name: volumes (idempotency)
@ -416,9 +416,9 @@
name: "{{ cname }}"
state: started
volumes:
- "/:/whatever:rw,z"
- "/tmp:/tmp"
- "/anon:rw"
- "/:/whatever:rw,z"
- "/tmp:/tmp"
- "/anon:rw"
register: volumes_2
- name: volumes (less volumes)
@ -428,7 +428,7 @@
name: "{{ cname }}"
state: started
volumes:
- "/tmp:/tmp"
- "/tmp:/tmp"
register: volumes_3
- name: volumes (more volumes)
@ -438,8 +438,8 @@
name: "{{ cname }}"
state: started
volumes:
- "/tmp:/tmp"
- "/tmp:/somewhereelse:ro,Z"
- "/tmp:/tmp"
- "/tmp:/somewhereelse:ro,Z"
force_kill: true
register: volumes_4
@ -450,8 +450,8 @@
name: "{{ cname }}"
state: started
volumes:
- "/tmp:/tmp"
- "/tmp:/somewhereelse:ro"
- "/tmp:/tmp"
- "/tmp:/somewhereelse:ro"
force_kill: true
register: volumes_5
@ -462,8 +462,8 @@
name: "{{ cname }}"
state: started
volumes:
- "/etc:/tmp"
- "/home:/tmp:ro"
- "/etc:/tmp"
- "/home:/tmp:ro"
force_kill: true
register: volumes_6
ignore_errors: true
@ -477,16 +477,16 @@
- assert:
that:
- volumes_1 is changed
- volumes_1.container.Config.Volumes | length == 1
- volumes_1.container.Config.Volumes['/anon:rw'] | length == 0
- volumes_2 is not changed
- volumes_3 is not changed
- volumes_4 is changed
- not volumes_4.container.Config.Volumes
- volumes_5 is changed
- volumes_6 is failed
- "'The mount point \"/tmp\" appears twice in the volumes option' in volumes_6.msg"
- volumes_1 is changed
- volumes_1.container.Config.Volumes | length == 1
- volumes_1.container.Config.Volumes['/anon:rw'] | length == 0
- volumes_2 is not changed
- volumes_3 is not changed
- volumes_4 is changed
- not volumes_4.container.Config.Volumes
- volumes_5 is changed
- volumes_6 is failed
- "'The mount point \"/tmp\" appears twice in the volumes option' in volumes_6.msg"
####################################################################
## volumes_from ####################################################
@ -499,10 +499,10 @@
name: "{{ container_name }}"
state: started
volumes:
- "{{ '/tmp:/tmp' if container_name == cname_h1 else '/:/whatever:ro' }}"
- "{{ '/tmp:/tmp' if container_name == cname_h1 else '/:/whatever:ro' }}"
loop:
- "{{ cname_h1 }}"
- "{{ cname_h2 }}"
- "{{ cname_h1 }}"
- "{{ cname_h2 }}"
loop_control:
loop_var: container_name
@ -540,18 +540,18 @@
state: absent
force_kill: true
loop:
- "{{ cname }}"
- "{{ cname_h1 }}"
- "{{ cname_h2 }}"
- "{{ cname }}"
- "{{ cname_h1 }}"
- "{{ cname_h2 }}"
loop_control:
loop_var: container_name
diff: false
- assert:
that:
- volumes_from_1 is changed
- volumes_from_2 is not changed
- volumes_from_3 is changed
- volumes_from_1 is changed
- volumes_from_2 is not changed
- volumes_from_3 is changed
####################################################################
####################################################################

View File

@ -20,8 +20,8 @@
name: "{{ network_name }}"
state: present
loop:
- "{{ nname_1 }}"
- "{{ nname_2 }}"
- "{{ nname_1 }}"
- "{{ nname_2 }}"
loop_control:
loop_var: network_name
@ -126,24 +126,24 @@
state: absent
force_kill: true
loop:
- "{{ cname }}"
- "{{ cname_h1 }}"
- "{{ cname }}"
- "{{ cname_h1 }}"
loop_control:
loop_var: container_name
diff: false
- assert:
that:
- network_mode_1 is changed
- network_mode_1.container.HostConfig.NetworkMode == 'host'
- network_mode_2 is not changed
- network_mode_2.container.HostConfig.NetworkMode == 'host'
- network_mode_3 is changed
- network_mode_3.container.HostConfig.NetworkMode == 'none'
- network_mode_4 is changed
- network_mode_4.container.HostConfig.NetworkMode == ('container:' ~ cname_h1_id.container.Id)
- network_mode_5 is not changed
- network_mode_5.container.HostConfig.NetworkMode == ('container:' ~ cname_h1_id.container.Id)
- network_mode_1 is changed
- network_mode_1.container.HostConfig.NetworkMode == 'host'
- network_mode_2 is not changed
- network_mode_2.container.HostConfig.NetworkMode == 'host'
- network_mode_3 is changed
- network_mode_3.container.HostConfig.NetworkMode == 'none'
- network_mode_4 is changed
- network_mode_4.container.HostConfig.NetworkMode == ('container:' ~ cname_h1_id.container.Id)
- network_mode_5 is not changed
- network_mode_5.container.HostConfig.NetworkMode == ('container:' ~ cname_h1_id.container.Id)
####################################################################
## networks, purge_networks for networks_cli_compatible=no #########
@ -156,8 +156,8 @@
name: "{{ cname }}"
state: started
networks:
- name: "{{ nname_1 }}"
- name: "{{ nname_2 }}"
- name: "{{ nname_1 }}"
- name: "{{ nname_2 }}"
networks_cli_compatible: false
register: networks_1
@ -168,8 +168,8 @@
name: "{{ cname }}"
state: started
networks:
- name: "{{ nname_1 }}"
- name: "{{ nname_2 }}"
- name: "{{ nname_1 }}"
- name: "{{ nname_2 }}"
networks_cli_compatible: false
register: networks_2
@ -182,8 +182,8 @@
comparisons:
networks: strict
networks:
- name: bridge
- name: "{{ nname_1 }}"
- name: bridge
- name: "{{ nname_1 }}"
networks_cli_compatible: false
force_kill: true
register: networks_3
@ -197,8 +197,8 @@
comparisons:
networks: strict
networks:
- name: "{{ nname_1 }}"
- name: bridge
- name: "{{ nname_1 }}"
- name: bridge
networks_cli_compatible: false
register: networks_4
@ -209,7 +209,7 @@
name: "{{ cname }}"
state: started
networks:
- name: bridge
- name: bridge
networks_cli_compatible: false
register: networks_5
@ -222,7 +222,7 @@
comparisons:
networks: strict
networks:
- name: bridge
- name: bridge
networks_cli_compatible: false
force_kill: true
register: networks_6
@ -236,8 +236,8 @@
comparisons:
networks: strict
networks:
- name: bridge
- name: "{{ nname_2 }}"
- name: bridge
- name: "{{ nname_2 }}"
networks_cli_compatible: false
force_kill: true
register: networks_7
@ -251,42 +251,42 @@
- assert:
that:
# networks_1 has networks default, 'bridge', nname_1
- networks_1 is changed
- networks_1.container.NetworkSettings.Networks | length == 3
- nname_1 in networks_1.container.NetworkSettings.Networks
- nname_2 in networks_1.container.NetworkSettings.Networks
- "'default' in networks_1.container.NetworkSettings.Networks or 'bridge' in networks_1.container.NetworkSettings.Networks"
# networks_2 has networks default, 'bridge', nname_1
- networks_2 is not changed
- networks_2.container.NetworkSettings.Networks | length == 3
- nname_1 in networks_2.container.NetworkSettings.Networks
- nname_2 in networks_1.container.NetworkSettings.Networks
- "'default' in networks_1.container.NetworkSettings.Networks or 'bridge' in networks_1.container.NetworkSettings.Networks"
# networks_3 has networks 'bridge', nname_1
- networks_3 is changed
- networks_3.container.NetworkSettings.Networks | length == 2
- nname_1 in networks_3.container.NetworkSettings.Networks
- "'default' in networks_3.container.NetworkSettings.Networks or 'bridge' in networks_3.container.NetworkSettings.Networks"
# networks_4 has networks 'bridge', nname_1
- networks_4 is not changed
- networks_4.container.NetworkSettings.Networks | length == 2
- nname_1 in networks_4.container.NetworkSettings.Networks
- "'default' in networks_4.container.NetworkSettings.Networks or 'bridge' in networks_4.container.NetworkSettings.Networks"
# networks_5 has networks 'bridge', nname_1
- networks_5 is not changed
- networks_5.container.NetworkSettings.Networks | length == 2
- nname_1 in networks_5.container.NetworkSettings.Networks
- "'default' in networks_5.container.NetworkSettings.Networks or 'bridge' in networks_5.container.NetworkSettings.Networks"
# networks_6 has networks 'bridge'
- networks_6 is changed
- networks_6.container.NetworkSettings.Networks | length == 1
- "'default' in networks_6.container.NetworkSettings.Networks or 'bridge' in networks_6.container.NetworkSettings.Networks"
# networks_7 has networks 'bridge', nname_2
- networks_7 is changed
- networks_7.container.NetworkSettings.Networks | length == 2
- nname_2 in networks_7.container.NetworkSettings.Networks
- "'default' in networks_7.container.NetworkSettings.Networks or 'bridge' in networks_7.container.NetworkSettings.Networks"
# networks_1 has networks default, 'bridge', nname_1
- networks_1 is changed
- networks_1.container.NetworkSettings.Networks | length == 3
- nname_1 in networks_1.container.NetworkSettings.Networks
- nname_2 in networks_1.container.NetworkSettings.Networks
- "'default' in networks_1.container.NetworkSettings.Networks or 'bridge' in networks_1.container.NetworkSettings.Networks"
# networks_2 has networks default, 'bridge', nname_1
- networks_2 is not changed
- networks_2.container.NetworkSettings.Networks | length == 3
- nname_1 in networks_2.container.NetworkSettings.Networks
- nname_2 in networks_1.container.NetworkSettings.Networks
- "'default' in networks_1.container.NetworkSettings.Networks or 'bridge' in networks_1.container.NetworkSettings.Networks"
# networks_3 has networks 'bridge', nname_1
- networks_3 is changed
- networks_3.container.NetworkSettings.Networks | length == 2
- nname_1 in networks_3.container.NetworkSettings.Networks
- "'default' in networks_3.container.NetworkSettings.Networks or 'bridge' in networks_3.container.NetworkSettings.Networks"
# networks_4 has networks 'bridge', nname_1
- networks_4 is not changed
- networks_4.container.NetworkSettings.Networks | length == 2
- nname_1 in networks_4.container.NetworkSettings.Networks
- "'default' in networks_4.container.NetworkSettings.Networks or 'bridge' in networks_4.container.NetworkSettings.Networks"
# networks_5 has networks 'bridge', nname_1
- networks_5 is not changed
- networks_5.container.NetworkSettings.Networks | length == 2
- nname_1 in networks_5.container.NetworkSettings.Networks
- "'default' in networks_5.container.NetworkSettings.Networks or 'bridge' in networks_5.container.NetworkSettings.Networks"
# networks_6 has networks 'bridge'
- networks_6 is changed
- networks_6.container.NetworkSettings.Networks | length == 1
- "'default' in networks_6.container.NetworkSettings.Networks or 'bridge' in networks_6.container.NetworkSettings.Networks"
# networks_7 has networks 'bridge', nname_2
- networks_7 is changed
- networks_7.container.NetworkSettings.Networks | length == 2
- nname_2 in networks_7.container.NetworkSettings.Networks
- "'default' in networks_7.container.NetworkSettings.Networks or 'bridge' in networks_7.container.NetworkSettings.Networks"
####################################################################
## networks for networks_cli_compatible=yes ########################
@ -299,11 +299,11 @@
name: "{{ cname }}"
state: started
networks:
- name: "{{ nname_1 }}"
aliases:
- alias1
- alias2
- name: "{{ nname_2 }}"
- name: "{{ nname_1 }}"
aliases:
- alias1
- alias2
- name: "{{ nname_2 }}"
networks_cli_compatible: true
register: networks_1
@ -314,8 +314,8 @@
name: "{{ cname }}"
state: started
networks:
- name: "{{ nname_1 }}"
- name: "{{ nname_2 }}"
- name: "{{ nname_1 }}"
- name: "{{ nname_2 }}"
networks_cli_compatible: true
register: networks_2
@ -409,38 +409,38 @@
- assert:
that:
# networks_1 has networks nname_1, nname_2
- networks_1 is changed
- networks_1.container.NetworkSettings.Networks | length == 2
- nname_1 in networks_1.container.NetworkSettings.Networks
- nname_2 in networks_1.container.NetworkSettings.Networks
# networks_2 has networks nname_1, nname_2
- networks_2 is not changed
- networks_2.container.NetworkSettings.Networks | length == 2
- nname_1 in networks_2.container.NetworkSettings.Networks
- nname_2 in networks_1.container.NetworkSettings.Networks
# networks_3 has networks 'bridge'
- networks_3 is changed
- networks_3.container.NetworkSettings.Networks | length == 1
- "'default' in networks_3.container.NetworkSettings.Networks or 'bridge' in networks_3.container.NetworkSettings.Networks"
# networks_4 has networks 'bridge'
- networks_4 is not changed
- networks_4.container.NetworkSettings.Networks | length == 1
- "'default' in networks_4.container.NetworkSettings.Networks or 'bridge' in networks_4.container.NetworkSettings.Networks"
# networks_5 has no networks
- networks_5 is changed
- networks_5.container.NetworkSettings.Networks | length == 0
# networks_6 has networks 'bridge'
- networks_6 is changed
- networks_6.container.NetworkSettings.Networks | length == 1
- "'default' in networks_6.container.NetworkSettings.Networks or 'bridge' in networks_6.container.NetworkSettings.Networks"
# networks_7 has networks 'bridge'
- networks_7 is not changed
- networks_7.container.NetworkSettings.Networks | length == 1
- "'default' in networks_7.container.NetworkSettings.Networks or 'bridge' in networks_7.container.NetworkSettings.Networks"
# networks_8 has no networks
- networks_8 is changed
- networks_8.container.NetworkSettings.Networks | length == 0
# networks_1 has networks nname_1, nname_2
- networks_1 is changed
- networks_1.container.NetworkSettings.Networks | length == 2
- nname_1 in networks_1.container.NetworkSettings.Networks
- nname_2 in networks_1.container.NetworkSettings.Networks
# networks_2 has networks nname_1, nname_2
- networks_2 is not changed
- networks_2.container.NetworkSettings.Networks | length == 2
- nname_1 in networks_2.container.NetworkSettings.Networks
- nname_2 in networks_1.container.NetworkSettings.Networks
# networks_3 has networks 'bridge'
- networks_3 is changed
- networks_3.container.NetworkSettings.Networks | length == 1
- "'default' in networks_3.container.NetworkSettings.Networks or 'bridge' in networks_3.container.NetworkSettings.Networks"
# networks_4 has networks 'bridge'
- networks_4 is not changed
- networks_4.container.NetworkSettings.Networks | length == 1
- "'default' in networks_4.container.NetworkSettings.Networks or 'bridge' in networks_4.container.NetworkSettings.Networks"
# networks_5 has no networks
- networks_5 is changed
- networks_5.container.NetworkSettings.Networks | length == 0
# networks_6 has networks 'bridge'
- networks_6 is changed
- networks_6.container.NetworkSettings.Networks | length == 1
- "'default' in networks_6.container.NetworkSettings.Networks or 'bridge' in networks_6.container.NetworkSettings.Networks"
# networks_7 has networks 'bridge'
- networks_7 is not changed
- networks_7.container.NetworkSettings.Networks | length == 1
- "'default' in networks_7.container.NetworkSettings.Networks or 'bridge' in networks_7.container.NetworkSettings.Networks"
# networks_8 has no networks
- networks_8 is changed
- networks_8.container.NetworkSettings.Networks | length == 0
####################################################################
## networks with comparisons #######################################
@ -453,7 +453,7 @@
name: "{{ cname }}"
state: started
networks:
- name: "{{ nname_1 }}"
- name: "{{ nname_1 }}"
networks_cli_compatible: true
register: networks_1
@ -464,7 +464,7 @@
name: "{{ cname }}"
state: started
networks:
- name: "{{ nname_2 }}"
- name: "{{ nname_2 }}"
networks_cli_compatible: true
comparisons:
network_mode: ignore # otherwise we'd have to set network_mode to nname_1
@ -502,7 +502,7 @@
name: "{{ cname }}"
state: started
networks:
- name: "{{ nname_2 }}"
- name: "{{ nname_2 }}"
networks_cli_compatible: true
comparisons:
network_mode: ignore # otherwise we'd have to set network_mode to nname_1
@ -517,7 +517,7 @@
name: "{{ cname }}"
state: started
networks:
- name: "{{ nname_2 }}"
- name: "{{ nname_2 }}"
networks_cli_compatible: true
comparisons:
networks: strict
@ -546,34 +546,34 @@
- assert:
that:
# networks_1 has networks nname_1
- networks_1 is changed
- networks_1.container.NetworkSettings.Networks | length == 1
- nname_1 in networks_1.container.NetworkSettings.Networks
# networks_2 has networks nname_1
- networks_2 is not changed
- networks_2.container.NetworkSettings.Networks | length == 1
- nname_1 in networks_2.container.NetworkSettings.Networks
# networks_3 has networks nname_1
- networks_3 is not changed
- networks_3.container.NetworkSettings.Networks | length == 1
- nname_1 in networks_3.container.NetworkSettings.Networks
# networks_4 has networks nname_1
- networks_4 is not changed
- networks_4.container.NetworkSettings.Networks | length == 1
- nname_1 in networks_4.container.NetworkSettings.Networks
# networks_5 has networks nname_1, nname_2
- networks_5 is changed
- networks_5.container.NetworkSettings.Networks | length == 2
- nname_1 in networks_5.container.NetworkSettings.Networks
- nname_2 in networks_5.container.NetworkSettings.Networks
# networks_6 has networks nname_2
- networks_6 is changed
- networks_6.container.NetworkSettings.Networks | length == 1
- nname_2 in networks_6.container.NetworkSettings.Networks
# networks_7 has no networks
- networks_7 is changed
- networks_7.container.NetworkSettings.Networks | length == 0
# networks_1 has networks nname_1
- networks_1 is changed
- networks_1.container.NetworkSettings.Networks | length == 1
- nname_1 in networks_1.container.NetworkSettings.Networks
# networks_2 has networks nname_1
- networks_2 is not changed
- networks_2.container.NetworkSettings.Networks | length == 1
- nname_1 in networks_2.container.NetworkSettings.Networks
# networks_3 has networks nname_1
- networks_3 is not changed
- networks_3.container.NetworkSettings.Networks | length == 1
- nname_1 in networks_3.container.NetworkSettings.Networks
# networks_4 has networks nname_1
- networks_4 is not changed
- networks_4.container.NetworkSettings.Networks | length == 1
- nname_1 in networks_4.container.NetworkSettings.Networks
# networks_5 has networks nname_1, nname_2
- networks_5 is changed
- networks_5.container.NetworkSettings.Networks | length == 2
- nname_1 in networks_5.container.NetworkSettings.Networks
- nname_2 in networks_5.container.NetworkSettings.Networks
# networks_6 has networks nname_2
- networks_6 is changed
- networks_6.container.NetworkSettings.Networks | length == 1
- nname_2 in networks_6.container.NetworkSettings.Networks
# networks_7 has no networks
- networks_7 is changed
- networks_7.container.NetworkSettings.Networks | length == 0
####################################################################
## networks with IP address ########################################
@ -586,9 +586,9 @@
name: "{{ cname }}"
state: stopped
networks:
- name: "{{ nname_3 }}"
ipv4_address: "{{ nname_3_ipv4_2 }}"
ipv6_address: "{{ nname_3_ipv6_2 }}"
- name: "{{ nname_3 }}"
ipv4_address: "{{ nname_3_ipv4_2 }}"
ipv6_address: "{{ nname_3_ipv6_2 }}"
networks_cli_compatible: true
register: networks_1
@ -599,9 +599,9 @@
name: "{{ cname }}"
state: stopped
networks:
- name: "{{ nname_3 }}"
ipv4_address: "{{ nname_3_ipv4_2 }}"
ipv6_address: "{{ nname_3_ipv6_2 }}"
- name: "{{ nname_3 }}"
ipv4_address: "{{ nname_3_ipv4_2 }}"
ipv6_address: "{{ nname_3_ipv6_2 }}"
networks_cli_compatible: true
register: networks_2
@ -612,9 +612,9 @@
name: "{{ cname }}"
state: stopped
networks:
- name: "{{ nname_3 }}"
ipv4_address: "{{ nname_3_ipv4_3 }}"
ipv6_address: "{{ nname_3_ipv6_2 }}"
- name: "{{ nname_3 }}"
ipv4_address: "{{ nname_3_ipv4_3 }}"
ipv6_address: "{{ nname_3_ipv6_2 }}"
networks_cli_compatible: true
register: networks_3
@ -625,9 +625,9 @@
name: "{{ cname }}"
state: stopped
networks:
- name: "{{ nname_3 }}"
ipv4_address: "{{ nname_3_ipv4_3 }}"
ipv6_address: "{{ nname_3_ipv6_3 }}"
- name: "{{ nname_3 }}"
ipv4_address: "{{ nname_3_ipv4_3 }}"
ipv6_address: "{{ nname_3_ipv6_3 }}"
networks_cli_compatible: true
register: networks_4
@ -644,9 +644,9 @@
name: "{{ cname }}"
state: started
networks:
- name: "{{ nname_3 }}"
ipv4_address: "{{ nname_3_ipv4_4 }}"
ipv6_address: "{{ nname_3_ipv6_3 }}"
- name: "{{ nname_3 }}"
ipv4_address: "{{ nname_3_ipv4_4 }}"
ipv6_address: "{{ nname_3_ipv6_3 }}"
networks_cli_compatible: true
force_kill: true
register: networks_6
@ -658,9 +658,9 @@
name: "{{ cname }}"
state: started
networks:
- name: "{{ nname_3 }}"
ipv4_address: "{{ nname_3_ipv4_4 }}"
ipv6_address: "{{ nname_3_ipv6_4 }}"
- name: "{{ nname_3 }}"
ipv4_address: "{{ nname_3_ipv4_4 }}"
ipv6_address: "{{ nname_3_ipv6_4 }}"
networks_cli_compatible: true
force_kill: true
register: networks_7
@ -672,9 +672,9 @@
name: "{{ cname }}"
state: started
networks:
- name: "{{ nname_3 }}"
ipv4_address: "{{ nname_3_ipv4_4 }}"
ipv6_address: "{{ nname_3_ipv6_4 }}"
- name: "{{ nname_3 }}"
ipv4_address: "{{ nname_3_ipv4_4 }}"
ipv6_address: "{{ nname_3_ipv6_4 }}"
networks_cli_compatible: true
register: networks_8
@ -687,46 +687,46 @@
- assert:
that:
- networks_1 is changed
- networks_1.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv4Address == nname_3_ipv4_2
- networks_1.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv6Address | normalize_ipaddr == nname_3_ipv6_2 | normalize_ipaddr
- networks_1.container.NetworkSettings.Networks[nname_3].IPAddress == ""
- networks_1.container.NetworkSettings.Networks[nname_3].GlobalIPv6Address == ""
- networks_2 is not changed
- networks_2.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv4Address == nname_3_ipv4_2
- networks_2.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv6Address | normalize_ipaddr == nname_3_ipv6_2 | normalize_ipaddr
- networks_2.container.NetworkSettings.Networks[nname_3].IPAddress == ""
- networks_2.container.NetworkSettings.Networks[nname_3].GlobalIPv6Address == ""
- networks_3 is changed
- networks_3.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv4Address == nname_3_ipv4_3
- networks_3.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv6Address | normalize_ipaddr == nname_3_ipv6_2 | normalize_ipaddr
- networks_3.container.NetworkSettings.Networks[nname_3].IPAddress == ""
- networks_3.container.NetworkSettings.Networks[nname_3].GlobalIPv6Address == ""
- networks_4 is changed
- networks_4.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv4Address == nname_3_ipv4_3
- networks_4.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv6Address | normalize_ipaddr == nname_3_ipv6_3 | normalize_ipaddr
- networks_4.container.NetworkSettings.Networks[nname_3].IPAddress == ""
- networks_4.container.NetworkSettings.Networks[nname_3].GlobalIPv6Address == ""
- networks_5 is changed
- networks_5.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv4Address == nname_3_ipv4_3
- networks_5.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv6Address | normalize_ipaddr == nname_3_ipv6_3 | normalize_ipaddr
- networks_5.container.NetworkSettings.Networks[nname_3].IPAddress == nname_3_ipv4_3
- networks_5.container.NetworkSettings.Networks[nname_3].GlobalIPv6Address | normalize_ipaddr == nname_3_ipv6_3 | normalize_ipaddr
- networks_6 is changed
- networks_6.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv4Address == nname_3_ipv4_4
- networks_6.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv6Address | normalize_ipaddr == nname_3_ipv6_3 | normalize_ipaddr
- networks_6.container.NetworkSettings.Networks[nname_3].IPAddress == nname_3_ipv4_4
- networks_6.container.NetworkSettings.Networks[nname_3].GlobalIPv6Address | normalize_ipaddr == nname_3_ipv6_3 | normalize_ipaddr
- networks_7 is changed
- networks_7.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv4Address == nname_3_ipv4_4
- networks_7.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv6Address | normalize_ipaddr == nname_3_ipv6_4 | normalize_ipaddr
- networks_7.container.NetworkSettings.Networks[nname_3].IPAddress == nname_3_ipv4_4
- networks_7.container.NetworkSettings.Networks[nname_3].GlobalIPv6Address | normalize_ipaddr == nname_3_ipv6_4 | normalize_ipaddr
- networks_8 is not changed
- networks_8.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv4Address == nname_3_ipv4_4
- networks_8.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv6Address | normalize_ipaddr == nname_3_ipv6_4 | normalize_ipaddr
- networks_8.container.NetworkSettings.Networks[nname_3].IPAddress == nname_3_ipv4_4
- networks_8.container.NetworkSettings.Networks[nname_3].GlobalIPv6Address | normalize_ipaddr == nname_3_ipv6_4 | normalize_ipaddr
- networks_1 is changed
- networks_1.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv4Address == nname_3_ipv4_2
- networks_1.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv6Address | normalize_ipaddr == nname_3_ipv6_2 | normalize_ipaddr
- networks_1.container.NetworkSettings.Networks[nname_3].IPAddress == ""
- networks_1.container.NetworkSettings.Networks[nname_3].GlobalIPv6Address == ""
- networks_2 is not changed
- networks_2.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv4Address == nname_3_ipv4_2
- networks_2.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv6Address | normalize_ipaddr == nname_3_ipv6_2 | normalize_ipaddr
- networks_2.container.NetworkSettings.Networks[nname_3].IPAddress == ""
- networks_2.container.NetworkSettings.Networks[nname_3].GlobalIPv6Address == ""
- networks_3 is changed
- networks_3.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv4Address == nname_3_ipv4_3
- networks_3.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv6Address | normalize_ipaddr == nname_3_ipv6_2 | normalize_ipaddr
- networks_3.container.NetworkSettings.Networks[nname_3].IPAddress == ""
- networks_3.container.NetworkSettings.Networks[nname_3].GlobalIPv6Address == ""
- networks_4 is changed
- networks_4.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv4Address == nname_3_ipv4_3
- networks_4.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv6Address | normalize_ipaddr == nname_3_ipv6_3 | normalize_ipaddr
- networks_4.container.NetworkSettings.Networks[nname_3].IPAddress == ""
- networks_4.container.NetworkSettings.Networks[nname_3].GlobalIPv6Address == ""
- networks_5 is changed
- networks_5.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv4Address == nname_3_ipv4_3
- networks_5.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv6Address | normalize_ipaddr == nname_3_ipv6_3 | normalize_ipaddr
- networks_5.container.NetworkSettings.Networks[nname_3].IPAddress == nname_3_ipv4_3
- networks_5.container.NetworkSettings.Networks[nname_3].GlobalIPv6Address | normalize_ipaddr == nname_3_ipv6_3 | normalize_ipaddr
- networks_6 is changed
- networks_6.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv4Address == nname_3_ipv4_4
- networks_6.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv6Address | normalize_ipaddr == nname_3_ipv6_3 | normalize_ipaddr
- networks_6.container.NetworkSettings.Networks[nname_3].IPAddress == nname_3_ipv4_4
- networks_6.container.NetworkSettings.Networks[nname_3].GlobalIPv6Address | normalize_ipaddr == nname_3_ipv6_3 | normalize_ipaddr
- networks_7 is changed
- networks_7.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv4Address == nname_3_ipv4_4
- networks_7.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv6Address | normalize_ipaddr == nname_3_ipv6_4 | normalize_ipaddr
- networks_7.container.NetworkSettings.Networks[nname_3].IPAddress == nname_3_ipv4_4
- networks_7.container.NetworkSettings.Networks[nname_3].GlobalIPv6Address | normalize_ipaddr == nname_3_ipv6_4 | normalize_ipaddr
- networks_8 is not changed
- networks_8.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv4Address == nname_3_ipv4_4
- networks_8.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv6Address | normalize_ipaddr == nname_3_ipv6_4 | normalize_ipaddr
- networks_8.container.NetworkSettings.Networks[nname_3].IPAddress == nname_3_ipv4_4
- networks_8.container.NetworkSettings.Networks[nname_3].GlobalIPv6Address | normalize_ipaddr == nname_3_ipv6_4 | normalize_ipaddr
####################################################################
####################################################################
@ -738,8 +738,8 @@
state: absent
force: true
loop:
- "{{ nname_1 }}"
- "{{ nname_2 }}"
- "{{ nname_3 }}"
- "{{ nname_1 }}"
- "{{ nname_2 }}"
- "{{ nname_3 }}"
loop_control:
loop_var: network_name

View File

@ -22,7 +22,7 @@
name: "{{ cname }}"
state: started
published_ports:
- "[::1:2000:3000"
- "[::1:2000:3000"
register: published_ports_1
ignore_errors: true
@ -33,7 +33,7 @@
name: "{{ cname }}"
state: started
published_ports:
- "::1:2000:3000"
- "::1:2000:3000"
register: published_ports_2
ignore_errors: true
@ -44,7 +44,7 @@
name: "{{ cname }}"
state: started
published_ports:
- "foo:2000:3000"
- "foo:2000:3000"
register: published_ports_3
ignore_errors: true
@ -68,11 +68,11 @@
name: "{{ cname }}"
state: started
exposed_ports:
- "9001"
- "9010-9050"
- "9001"
- "9010-9050"
published_ports:
- "9001:9001"
- "9010-9050:9010-9050"
- "9001:9001"
- "9010-9050:9010-9050"
force_kill: true
register: published_ports_1
@ -83,11 +83,11 @@
name: "{{ cname }}"
state: started
exposed_ports:
- "9001"
- "9010-9050"
- "9001"
- "9010-9050"
published_ports:
- "9001:9001"
- "9010-9050:9010-9050"
- "9001:9001"
- "9010-9050:9010-9050"
force_kill: true
register: published_ports_2
@ -98,11 +98,11 @@
name: "{{ cname }}"
state: started
exposed_ports:
- "9001"
- "9010-9050"
- "9001"
- "9010-9050"
published_ports:
- "9001:9001"
- "9020-9060:9020-9060"
- "9001:9001"
- "9020-9060:9020-9060"
force_kill: true
register: published_ports_3
@ -115,9 +115,9 @@
- assert:
that:
- published_ports_1 is changed
- published_ports_2 is not changed
- published_ports_3 is changed
- published_ports_1 is changed
- published_ports_2 is not changed
- published_ports_3 is changed
####################################################################
## published_ports: one-element container port range ###############
@ -130,7 +130,7 @@
name: "{{ item }}"
state: started
published_ports:
- "9010-9050:9010"
- "9010-9050:9010"
force_kill: true
loop:
- '{{ cname }}'
@ -144,7 +144,7 @@
name: "{{ item }}"
state: started
published_ports:
- "9010-9050:9010"
- "9010-9050:9010"
force_kill: true
loop:
- '{{ cname }}'
@ -158,7 +158,7 @@
name: "{{ item }}"
state: started
published_ports:
- "9010-9051:9010"
- "9010-9051:9010"
force_kill: true
loop:
- '{{ cname }}'
@ -177,9 +177,9 @@
- assert:
that:
- published_ports_1 is changed
- published_ports_2 is not changed
- published_ports_3 is changed
- published_ports_1 is changed
- published_ports_2 is not changed
- published_ports_3 is changed
####################################################################
## published_ports: IPv6 addresses #################################
@ -194,7 +194,7 @@
name: "{{ cname }}"
state: started
published_ports:
- "[::1]:9001:9001"
- "[::1]:9001:9001"
force_kill: true
register: published_ports_1
@ -205,7 +205,7 @@
name: "{{ cname }}"
state: started
published_ports:
- "[::1]:9001:9001"
- "[::1]:9001:9001"
force_kill: true
register: published_ports_2
@ -216,7 +216,7 @@
name: "{{ cname }}"
state: started
published_ports:
- "127.0.0.1:9001:9001"
- "127.0.0.1:9001:9001"
force_kill: true
register: published_ports_3
@ -227,7 +227,7 @@
name: "{{ cname }}"
state: started
published_ports:
- "localhost:9001:9001"
- "localhost:9001:9001"
force_kill: true
register: published_ports_4
ignore_errors: true
@ -241,10 +241,10 @@
- assert:
that:
- published_ports_1 is changed
- published_ports_2 is not changed
- published_ports_3 is changed
- published_ports_4 is failed
- published_ports_1 is changed
- published_ports_2 is not changed
- published_ports_3 is changed
- published_ports_4 is failed
####################################################################
## publish_all_ports ###############################################

View File

@ -29,10 +29,10 @@
# before the container is stopped (see
# https://github.com/ansible/ansible/issues/45486).
networks:
- name: "nonexistant-network-{{ (2**32) | random }}"
- name: "nonexistant-network-{{ (2**32) | random }}"
published_ports:
- '1:2'
- '3'
- '1:2'
- '3'
links:
- "nonexistant-container-{{ (2**32) | random }}:test"
- "nonexistant-container-{{ (2**32) | random }}:test"
state: absent

View File

@ -50,10 +50,10 @@
- assert:
that:
- create_1 is changed
- create_2 is changed
- create_3 is not changed
- create_4 is not changed
- create_1 is changed
- create_2 is changed
- create_3 is not changed
- create_4 is not changed
####################################################################
## Starting (after creation) #######################################
@ -87,10 +87,10 @@
- assert:
that:
- start_1 is changed
- start_2 is changed
- start_3 is not changed
- start_4 is not changed
- start_1 is changed
- start_2 is changed
- start_3 is not changed
- start_4 is not changed
####################################################################
## Present check for running container #############################
@ -115,8 +115,8 @@
- assert:
that:
- present_check_1 is not changed
- present_check_2 is not changed
- present_check_1 is not changed
- present_check_2 is not changed
####################################################################
## Starting (from scratch) #########################################
@ -168,10 +168,10 @@
- assert:
that:
- start_scratch_1 is changed
- start_scratch_2 is changed
- start_scratch_3 is not changed
- start_scratch_4 is not changed
- start_scratch_1 is changed
- start_scratch_2 is changed
- start_scratch_3 is not changed
- start_scratch_4 is not changed
####################################################################
## Recreating ######################################################
@ -253,16 +253,16 @@
- assert:
that:
- recreate_2 is changed
- recreate_3 is changed
- recreate_4 is changed
- recreate_5 is changed
- recreate_6 is changed
- recreate_1.container.Id == recreate_2.container.Id
- recreate_1.container.Id != recreate_3.container.Id
- recreate_3.container.Id == recreate_4.container.Id
- recreate_4.container.Id == recreate_5.container.Id
- recreate_4.container.Id != recreate_6.container.Id
- recreate_2 is changed
- recreate_3 is changed
- recreate_4 is changed
- recreate_5 is changed
- recreate_6 is changed
- recreate_1.container.Id == recreate_2.container.Id
- recreate_1.container.Id != recreate_3.container.Id
- recreate_3.container.Id == recreate_4.container.Id
- recreate_4.container.Id == recreate_5.container.Id
- recreate_4.container.Id != recreate_6.container.Id
####################################################################
## Restarting ######################################################
@ -276,7 +276,7 @@
state: started
stop_timeout: 1
volumes:
- /tmp/tmp
- /tmp/tmp
register: restart_1
- name: Restarting (restart, check mode)
@ -310,7 +310,7 @@
state: started
stop_timeout: 1
volumes:
- /tmp/tmp
- /tmp/tmp
register: restart_4
- name: cleanup
@ -322,11 +322,11 @@
- assert:
that:
- restart_1 is changed
- restart_2 is changed
- restart_3 is changed
- restart_1.container.Id == restart_3.container.Id
- restart_4 is not changed
- restart_1 is changed
- restart_2 is changed
- restart_3 is changed
- restart_1.container.Id == restart_3.container.Id
- restart_4 is not changed
####################################################################
## Stopping ########################################################
@ -368,10 +368,10 @@
- assert:
that:
- stop_1 is changed
- stop_2 is changed
- stop_3 is not changed
- stop_4 is not changed
- stop_1 is changed
- stop_2 is changed
- stop_3 is not changed
- stop_4 is not changed
####################################################################
## Removing ########################################################
@ -405,10 +405,10 @@
- assert:
that:
- remove_1 is changed
- remove_2 is changed
- remove_3 is not changed
- remove_4 is not changed
- remove_1 is changed
- remove_2 is changed
- remove_3 is not changed
- remove_4 is not changed
####################################################################
## Removing (from running) #########################################
@ -453,7 +453,7 @@
- assert:
that:
- remove_from_running_1 is changed
- remove_from_running_2 is changed
- remove_from_running_3 is not changed
- remove_from_running_4 is not changed
- remove_from_running_1 is changed
- remove_from_running_2 is changed
- remove_from_running_3 is not changed
- remove_from_running_4 is not changed

View File

@ -131,91 +131,91 @@
- name: Check general things
assert:
that:
- create is changed
- update is changed
- update2 is changed
- recreate is changed
- create is changed
- update is changed
- update2 is changed
- recreate is changed
# Make sure the container was *not* recreated when it should not be
- create.container.Id == update.container.Id
- create.container.Id == update2.container.Id
# Make sure the container was *not* recreated when it should not be
- create.container.Id == update.container.Id
- create.container.Id == update2.container.Id
# Make sure that the container was recreated when it should be
- create.container.Id != recreate.container.Id
# Make sure that the container was recreated when it should be
- create.container.Id != recreate.container.Id
- name: Check diff for first update
assert:
that:
# blkio_weight sometimes cannot be set, then we end up with 0 instead of the value we had
- >-
not has_blkio_weight or update.diff.before.blkio_weight == 123 or ('Docker warning: Your kernel does not support Block I/O weight or the cgroup is not mounted. Weight discarded.' in (create.warnings | default([])))
- not has_blkio_weight or update.diff.after.blkio_weight == 234
- update.diff.before.cpu_period == 90000
- update.diff.after.cpu_period == 50000
- update.diff.before.cpu_quota == 150000
- update.diff.after.cpu_quota == 50000
- update.diff.before.cpu_shares == 900
- update.diff.after.cpu_shares == 1100
- update.diff.before.memory == 67108864
- update.diff.after.memory == 50331648
- update.diff.before.memory_reservation == 67108864
- update.diff.after.memory_reservation == 50331648
- >-
(update.diff.before.memory_swap | default(0)) == 67108864 or ('Docker warning: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.' in (create.warnings | default([])))
- >-
(update.diff.after.memory_swap | default(0)) == -1 or ('Docker warning: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.' in (create.warnings | default([])))
- "'restart_policy' not in update.diff.before"
- update.diff.before.restart_retries == 5
- update.diff.after.restart_retries == 2
# blkio_weight sometimes cannot be set, then we end up with 0 instead of the value we had
- >-
not has_blkio_weight or update.diff.before.blkio_weight == 123 or ('Docker warning: Your kernel does not support Block I/O weight or the cgroup is not mounted. Weight discarded.' in (create.warnings | default([])))
- not has_blkio_weight or update.diff.after.blkio_weight == 234
- update.diff.before.cpu_period == 90000
- update.diff.after.cpu_period == 50000
- update.diff.before.cpu_quota == 150000
- update.diff.after.cpu_quota == 50000
- update.diff.before.cpu_shares == 900
- update.diff.after.cpu_shares == 1100
- update.diff.before.memory == 67108864
- update.diff.after.memory == 50331648
- update.diff.before.memory_reservation == 67108864
- update.diff.after.memory_reservation == 50331648
- >-
(update.diff.before.memory_swap | default(0)) == 67108864 or ('Docker warning: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.' in (create.warnings | default([])))
- >-
(update.diff.after.memory_swap | default(0)) == -1 or ('Docker warning: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.' in (create.warnings | default([])))
- "'restart_policy' not in update.diff.before"
- update.diff.before.restart_retries == 5
- update.diff.after.restart_retries == 2
- name: Check diff for second update
assert:
that:
- >-
not has_blkio_weight or update2.diff.before.blkio_weight == 234 or ('Docker warning: Your kernel does not support Block I/O weight or the cgroup is not mounted. Weight discarded.' in (create.warnings | default([])))
- not has_blkio_weight or update2.diff.after.blkio_weight == 135
- update2.diff.before.cpu_period == 50000
- update2.diff.after.cpu_period == 30000
- update2.diff.before.cpu_quota == 50000
- update2.diff.after.cpu_quota == 40000
- update2.diff.before.cpu_shares == 1100
- update2.diff.after.cpu_shares == 1000
- update2.diff.before.memory == 50331648
- update2.diff.after.memory == 33554432
- update2.diff.before.memory_reservation == 50331648
- update2.diff.after.memory_reservation == 31457280
- >-
(update2.diff.before.memory_swap | default(0)) == -1 or ('Docker warning: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.' in (create.warnings | default([])))
- >-
(update2.diff.after.memory_swap | default(0)) == 134217728 or ('Docker warning: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.' in (create.warnings | default([])))
- update2.diff.before.restart_policy == 'on-failure'
- update2.diff.after.restart_policy == 'always'
- update2.diff.before.restart_retries == 2
- update2.diff.after.restart_retries == 0
- >-
not has_blkio_weight or update2.diff.before.blkio_weight == 234 or ('Docker warning: Your kernel does not support Block I/O weight or the cgroup is not mounted. Weight discarded.' in (create.warnings | default([])))
- not has_blkio_weight or update2.diff.after.blkio_weight == 135
- update2.diff.before.cpu_period == 50000
- update2.diff.after.cpu_period == 30000
- update2.diff.before.cpu_quota == 50000
- update2.diff.after.cpu_quota == 40000
- update2.diff.before.cpu_shares == 1100
- update2.diff.after.cpu_shares == 1000
- update2.diff.before.memory == 50331648
- update2.diff.after.memory == 33554432
- update2.diff.before.memory_reservation == 50331648
- update2.diff.after.memory_reservation == 31457280
- >-
(update2.diff.before.memory_swap | default(0)) == -1 or ('Docker warning: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.' in (create.warnings | default([])))
- >-
(update2.diff.after.memory_swap | default(0)) == 134217728 or ('Docker warning: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.' in (create.warnings | default([])))
- update2.diff.before.restart_policy == 'on-failure'
- update2.diff.after.restart_policy == 'always'
- update2.diff.before.restart_retries == 2
- update2.diff.after.restart_retries == 0
- name: Check diff for recreation
assert:
that:
- >-
not has_blkio_weight or recreate.diff.before.blkio_weight == 135 or ('Docker warning: Your kernel does not support Block I/O weight or the cgroup is not mounted. Weight discarded.' in (create.warnings | default([])))
- not has_blkio_weight or recreate.diff.after.blkio_weight == 234
- recreate.diff.before.cpu_period == 30000
- recreate.diff.after.cpu_period == 50000
- recreate.diff.before.cpu_quota == 40000
- recreate.diff.after.cpu_quota == 50000
- recreate.diff.before.cpu_shares == 1000
- recreate.diff.after.cpu_shares == 1100
- recreate.diff.before.memory == 33554432
- recreate.diff.after.memory == 50331648
- recreate.diff.before.memory_reservation == 31457280
- recreate.diff.after.memory_reservation == 50331648
- >-
(recreate.diff.before.memory_swap | default(0)) == 134217728 or ('Docker warning: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.' in (create.warnings | default([])))
- >-
(recreate.diff.after.memory_swap | default(0)) == -1 or ('Docker warning: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.' in (create.warnings | default([])))
- recreate.diff.before.restart_policy == 'always'
- recreate.diff.after.restart_policy == 'on-failure'
- recreate.diff.before.restart_retries == 0
- recreate.diff.after.restart_retries == 2
- recreate.diff.before.command == ['/bin/sh', '-c', 'sleep 10m']
- recreate.diff.after.command == ['/bin/sh', '-c', 'sleep 20m']
- >-
not has_blkio_weight or recreate.diff.before.blkio_weight == 135 or ('Docker warning: Your kernel does not support Block I/O weight or the cgroup is not mounted. Weight discarded.' in (create.warnings | default([])))
- not has_blkio_weight or recreate.diff.after.blkio_weight == 234
- recreate.diff.before.cpu_period == 30000
- recreate.diff.after.cpu_period == 50000
- recreate.diff.before.cpu_quota == 40000
- recreate.diff.after.cpu_quota == 50000
- recreate.diff.before.cpu_shares == 1000
- recreate.diff.after.cpu_shares == 1100
- recreate.diff.before.memory == 33554432
- recreate.diff.after.memory == 50331648
- recreate.diff.before.memory_reservation == 31457280
- recreate.diff.after.memory_reservation == 50331648
- >-
(recreate.diff.before.memory_swap | default(0)) == 134217728 or ('Docker warning: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.' in (create.warnings | default([])))
- >-
(recreate.diff.after.memory_swap | default(0)) == -1 or ('Docker warning: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.' in (create.warnings | default([])))
- recreate.diff.before.restart_policy == 'always'
- recreate.diff.after.restart_policy == 'on-failure'
- recreate.diff.before.restart_retries == 0
- recreate.diff.after.restart_retries == 2
- recreate.diff.before.command == ['/bin/sh', '-c', 'sleep 10m']
- recreate.diff.after.command == ['/bin/sh', '-c', 'sleep 20m']

View File

@ -9,218 +9,218 @@
####################################################################
- block:
- name: Create random container name
set_fact:
cname: "{{ 'ansible-docker-test-%0x' % ((2**32) | random) }}"
- 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: true
- name: Make sure container is not there
docker_container:
name: "{{ cname }}"
state: absent
force_kill: true
- name: Execute in a non-present container
docker_container_exec:
container: "{{ cname }}"
command: "/bin/bash -c 'ls -a'"
register: result
ignore_errors: true
- 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"
- 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: true
- name: Make sure container exists
docker_container:
name: "{{ cname }}"
image: "{{ docker_test_image_alpine }}"
command: '/bin/sh -c "sleep 10m"'
state: started
force_kill: true
- name: Execute in a present container (command)
docker_container_exec:
container: "{{ cname }}"
command: "/bin/sh -c 'ls -a'"
register: result_cmd
- 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"
- 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
- 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
- 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
- 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 == []
- 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
- 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 == []
- 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
- 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 == []
- 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
- 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 == []
- 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: 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
- 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 is changed
- 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 == []
- "'exec_id' not in result"
- assert:
that:
- result is changed
- 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 == []
- "'exec_id' not in result"
- name: Execute in a present container (detached)
docker_container_exec:
container: "{{ cname }}"
argv:
- /bin/sh
- '-c'
- sleep 1m
detach: true
register: result
- name: Execute in a present container (detached)
docker_container_exec:
container: "{{ cname }}"
argv:
- /bin/sh
- '-c'
- sleep 1m
detach: true
register: result
- debug: var=result
- debug: var=result
- assert:
that:
- result is changed
- "'rc' not in result"
- "'stdout' not in result"
- "'stderr' not in result"
- result.exec_id is string
- assert:
that:
- result is changed
- "'rc' not in result"
- "'stdout' not in result"
- "'stderr' not in result"
- result.exec_id is string
- name: Execute in a present container (environment variable)
docker_container_exec:
container: "{{ cname }}"
argv:
- /bin/sh
- '-c'
- 'echo "$FOO" ; echo $FOO > /dev/stderr'
env:
FOO: |-
bar
baz
register: result
- name: Execute in a present container (environment variable)
docker_container_exec:
container: "{{ cname }}"
argv:
- /bin/sh
- '-c'
- 'echo "$FOO" ; echo $FOO > /dev/stderr'
env:
FOO: |-
bar
baz
register: result
- assert:
that:
- result.rc == 0
- result.stdout == 'bar\nbaz'
- result.stdout_lines == ['bar', 'baz']
- result.stderr == 'bar baz'
- result.stderr_lines == ['bar baz']
- assert:
that:
- result.rc == 0
- result.stdout == 'bar\nbaz'
- result.stdout_lines == ['bar', 'baz']
- result.stderr == 'bar baz'
- result.stderr_lines == ['bar baz']
always:
- name: Cleanup
docker_container:
name: "{{ cname }}"
state: absent
force_kill: true
- name: Cleanup
docker_container:
name: "{{ cname }}"
state: absent
force_kill: true
when: docker_api_version is version('1.25', '>=')

View File

@ -9,74 +9,74 @@
####################################################################
- block:
- name: Create random container name
set_fact:
cname: "{{ 'ansible-docker-test-%0x' % ((2**32) | random) }}"
- 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: true
- name: Make sure container is not there
docker_container:
name: "{{ cname }}"
state: absent
force_kill: true
- name: Inspect a non-present container
docker_container_info:
name: "{{ cname }}"
register: result
- name: Inspect a non-present container
docker_container_info:
name: "{{ cname }}"
register: result
- assert:
that:
- "not result.exists"
- "'container' in result"
- "result.container is none"
- assert:
that:
- "not result.exists"
- "'container' in result"
- "result.container is none"
- name: Make sure container exists
docker_container:
name: "{{ cname }}"
image: "{{ docker_test_image_alpine }}"
command: '/bin/sh -c "sleep 10m"'
state: started
force_kill: true
- name: Make sure container exists
docker_container:
name: "{{ cname }}"
image: "{{ docker_test_image_alpine }}"
command: '/bin/sh -c "sleep 10m"'
state: started
force_kill: true
- name: Inspect a present container
docker_container_info:
name: "{{ cname }}"
register: result
- name: Dump docker_container_info result
debug: var=result
- name: Inspect a present container
docker_container_info:
name: "{{ cname }}"
register: result
- name: Dump docker_container_info result
debug: var=result
- name: "Comparison: use 'docker inspect'"
command: docker inspect "{{ cname }}"
register: docker_inspect
ignore_errors: true
- block:
- set_fact:
docker_inspect_result: "{{ docker_inspect.stdout | from_json }}"
- name: Dump docker inspect result
debug: var=docker_inspect_result
when: docker_inspect is not failed
- name: "Comparison: use 'docker inspect'"
command: docker inspect "{{ cname }}"
register: docker_inspect
ignore_errors: true
- block:
- set_fact:
docker_inspect_result: "{{ docker_inspect.stdout | from_json }}"
- name: Dump docker inspect result
debug: var=docker_inspect_result
when: docker_inspect is not failed
- assert:
that:
- result.exists
- "'container' in result"
- "result.container is truthy"
- assert:
that:
- result.exists
- "'container' in result"
- "result.container is truthy"
- assert:
that:
- "result.container == docker_inspect_result[0]"
when: docker_inspect is not failed
- assert:
that:
- "'is too new. Maximum supported API version is' in docker_inspect.stderr"
when: docker_inspect is failed
- assert:
that:
- "result.container == docker_inspect_result[0]"
when: docker_inspect is not failed
- assert:
that:
- "'is too new. Maximum supported API version is' in docker_inspect.stderr"
when: docker_inspect is failed
always:
- name: Cleanup
docker_container:
name: "{{ cname }}"
state: absent
force_kill: true
- name: Cleanup
docker_container:
name: "{{ cname }}"
state: absent
force_kill: true
when: docker_api_version is version('1.25', '>=')

View File

@ -51,8 +51,8 @@
- assert:
that:
- create_1 is changed
- create_2 is not changed
- create_1 is changed
- create_2 is not changed
- name: Inspect container with CLI tool
ansible.builtin.command:
@ -78,8 +78,8 @@
- assert:
that:
- start_1 is changed
- start_2 is not changed
- start_1 is changed
- start_2 is not changed
- name: Inspect container with CLI tool
ansible.builtin.command:
@ -107,8 +107,8 @@
- assert:
that:
- remove_1 is changed
- remove_2 is not changed
- remove_1 is changed
- remove_2 is not changed
- name: Inspect container with CLI tool
ansible.builtin.command:

View File

@ -13,379 +13,379 @@
msg: "Using container names '{{ cname }}' and '{{ cname2 }}', and volume name '{{ vname }}'"
- block:
- name: Get info on Docker host
docker_host_info:
register: output
- name: Get info on Docker host
docker_host_info:
register: output
- name: assert reading docker host facts when docker is running
assert:
that:
- output.host_info.Name is string
- output.containers is not defined
- output.networks is not defined
- output.volumes is not defined
- output.images is not defined
- output.disk_usage is not defined
- output.can_talk_to_docker is true
- name: assert reading docker host facts when docker is running
assert:
that:
- output.host_info.Name is string
- output.containers is not defined
- output.networks is not defined
- output.volumes is not defined
- output.images is not defined
- output.disk_usage is not defined
- output.can_talk_to_docker is true
- block:
- name: Get info on Docker host with invalid api_version
docker_host_info:
api_version: 1.999.999
register: output
ignore_errors: true
- name: Get info on Docker host with invalid api_version
docker_host_info:
api_version: 1.999.999
register: output
ignore_errors: true
- name: assert can_talk_is_docker is false
assert:
that:
- output is failed
- output.can_talk_to_docker is false
- name: assert can_talk_is_docker is false
assert:
that:
- output is failed
- output.can_talk_to_docker is false
- block:
- name: Get info on Docker host with invalid docker_host
docker_host_info:
docker_host: tcp://127.0.0.1:80
register: output
ignore_errors: true
- name: Get info on Docker host with invalid docker_host
docker_host_info:
docker_host: tcp://127.0.0.1:80
register: output
ignore_errors: true
- name: assert can_talk_is_docker is false
assert:
that:
- output is failed
- output.can_talk_to_docker is false
- name: assert can_talk_is_docker is false
assert:
that:
- output is failed
- output.can_talk_to_docker is false
# Container and volume are created so that all lists are non-empty:
# * container and volume lists are non-emtpy because of the created objects;
# * image list is non-empty because the image of the container is there;
# * network list is always non-empty (default networks).
- name: Create running container
docker_container:
image: "{{ docker_test_image_alpine }}"
command: '/bin/sh -c "sleep 10m"'
name: "{{ cname }}"
labels:
key1: value1
key2: value2
state: started
register: container_output
# Container and volume are created so that all lists are non-empty:
# * container and volume lists are non-emtpy because of the created objects;
# * image list is non-empty because the image of the container is there;
# * network list is always non-empty (default networks).
- name: Create running container
docker_container:
image: "{{ docker_test_image_alpine }}"
command: '/bin/sh -c "sleep 10m"'
name: "{{ cname }}"
labels:
key1: value1
key2: value2
state: started
register: container_output
- name: Create running container
docker_container:
image: "{{ docker_test_image_alpine }}"
name: "{{ cname2 }}"
labels:
key2: value2
key3: value3
state: stopped
register: container2_output
- name: Create running container
docker_container:
image: "{{ docker_test_image_alpine }}"
name: "{{ cname2 }}"
labels:
key2: value2
key3: value3
state: stopped
register: container2_output
- assert:
that:
- container_output is changed
- container2_output is changed
- assert:
that:
- container_output is changed
- container2_output is changed
- name: Create a volume
docker_volume:
name: "{{ vname }}"
register: volume_output
- name: Create a volume
docker_volume:
name: "{{ vname }}"
register: volume_output
- assert:
that:
- volume_output is changed
- assert:
that:
- volume_output is changed
- name: Get info on Docker host and list containers
docker_host_info:
containers: true
register: output
- name: Get info on Docker host and list containers
docker_host_info:
containers: true
register: output
- name: assert reading docker host facts when docker is running and list containers
assert:
that:
- 'output.host_info.Name is string'
- 'output.networks is not defined'
- 'output.volumes is not defined'
- 'output.images is not defined'
- 'output.disk_usage is not defined'
- 'output.containers[0].Image is string'
- 'output.containers[0].ImageID is not defined'
- name: assert reading docker host facts when docker is running and list containers
assert:
that:
- 'output.host_info.Name is string'
- 'output.networks is not defined'
- 'output.volumes is not defined'
- 'output.images is not defined'
- 'output.disk_usage is not defined'
- 'output.containers[0].Image is string'
- 'output.containers[0].ImageID is not defined'
- name: Get info on Docker host and list containers matching filters (single label)
docker_host_info:
containers: true
containers_filters:
label: key1=value1
register: output
- name: Get info on Docker host and list containers matching filters (single label)
docker_host_info:
containers: true
containers_filters:
label: key1=value1
register: output
- name: assert container is returned when filters are matched (single label)
assert:
that: "output.containers | length == 1"
- name: assert container is returned when filters are matched (single label)
assert:
that: "output.containers | length == 1"
- name: Get info on Docker host and list containers matching filters (multiple labels)
docker_host_info:
containers: true
containers_filters:
label:
- key1=value1
- key2=value2
register: output
- name: Get info on Docker host and list containers matching filters (multiple labels)
docker_host_info:
containers: true
containers_filters:
label:
- key1=value1
- key2=value2
register: output
- name: assert container is returned when filters are matched (multiple labels)
assert:
that: "output.containers | length == 1"
- name: assert container is returned when filters are matched (multiple labels)
assert:
that: "output.containers | length == 1"
- name: Get info on Docker host and do not list containers which do not match filters
docker_host_info:
containers: true
containers_filters:
label:
- key1=value1
- key2=value2
- key3=value3
register: output
- name: Get info on Docker host and do not list containers which do not match filters
docker_host_info:
containers: true
containers_filters:
label:
- key1=value1
- key2=value2
- key3=value3
register: output
- name: assert no container is returned when filters are not matched
assert:
that: "output.containers | length == 0"
- name: assert no container is returned when filters are not matched
assert:
that: "output.containers | length == 0"
- name: Get info on Docker host and list containers matching filters (single label, not all containers)
docker_host_info:
containers: true
containers_all: false
containers_filters:
label: key2=value2
register: output
- name: Get info on Docker host and list containers matching filters (single label, not all containers)
docker_host_info:
containers: true
containers_all: false
containers_filters:
label: key2=value2
register: output
- name: Get info on Docker host and list containers matching filters (single label, all containers)
docker_host_info:
containers: true
containers_all: true
containers_filters:
label: key2=value2
register: output_all
- name: Get info on Docker host and list containers matching filters (single label, all containers)
docker_host_info:
containers: true
containers_all: true
containers_filters:
label: key2=value2
register: output_all
- name: assert one resp. two container is returned
assert:
that:
- "output.containers | length == 1"
- "output_all.containers | length == 2"
- name: assert one resp. two container is returned
assert:
that:
- "output.containers | length == 1"
- "output_all.containers | length == 2"
- name: Get info on Docker host and list containers with verbose output
docker_host_info:
containers: true
verbose_output: true
register: output
- name: Get info on Docker host and list containers with verbose output
docker_host_info:
containers: true
verbose_output: true
register: output
- name: assert reading docker host facts when docker is running and list containers with verbose output
assert:
that:
- 'output.host_info.Name is string'
- 'output.networks is not defined'
- 'output.volumes is not defined'
- 'output.images is not defined'
- 'output.disk_usage is not defined'
- 'output.containers[0].Image is string'
- 'output.containers[0].ImageID is string'
- name: assert reading docker host facts when docker is running and list containers with verbose output
assert:
that:
- 'output.host_info.Name is string'
- 'output.networks is not defined'
- 'output.volumes is not defined'
- 'output.images is not defined'
- 'output.disk_usage is not defined'
- 'output.containers[0].Image is string'
- 'output.containers[0].ImageID is string'
- name: Get info on Docker host and list images
docker_host_info:
images: true
register: output
- name: Get info on Docker host and list images
docker_host_info:
images: true
register: output
- name: assert reading docker host facts when docker is running and list images
assert:
that:
- 'output.host_info.Name is string'
- 'output.containers is not defined'
- 'output.networks is not defined'
- 'output.volumes is not defined'
- 'output.images[0].Id is string'
- 'output.images[0].ParentId is not defined'
- 'output.disk_usage is not defined'
- name: assert reading docker host facts when docker is running and list images
assert:
that:
- 'output.host_info.Name is string'
- 'output.containers is not defined'
- 'output.networks is not defined'
- 'output.volumes is not defined'
- 'output.images[0].Id is string'
- 'output.images[0].ParentId is not defined'
- 'output.disk_usage is not defined'
- name: Get info on Docker host and list images with verbose output
docker_host_info:
images: true
verbose_output: true
register: output
- name: Get info on Docker host and list images with verbose output
docker_host_info:
images: true
verbose_output: true
register: output
- name: assert reading docker host facts when docker is running and list images with verbose output
assert:
that:
- 'output.host_info.Name is string'
- 'output.containers is not defined'
- 'output.networks is not defined'
- 'output.volumes is not defined'
- 'output.images[0].Id is string'
- 'output.images[0].ParentId is string'
- 'output.disk_usage is not defined'
- name: assert reading docker host facts when docker is running and list images with verbose output
assert:
that:
- 'output.host_info.Name is string'
- 'output.containers is not defined'
- 'output.networks is not defined'
- 'output.volumes is not defined'
- 'output.images[0].Id is string'
- 'output.images[0].ParentId is string'
- 'output.disk_usage is not defined'
- name: Get info on Docker host and list networks
docker_host_info:
networks: true
register: output
- name: Get info on Docker host and list networks
docker_host_info:
networks: true
register: output
- name: assert reading docker host facts when docker is running and list networks
assert:
that:
- 'output.host_info.Name is string'
- 'output.containers is not defined'
- 'output.networks[0].Id is string'
- 'output.networks[0].Created is not defined'
- 'output.volumes is not defined'
- 'output.images is not defined'
- 'output.disk_usage is not defined'
- name: assert reading docker host facts when docker is running and list networks
assert:
that:
- 'output.host_info.Name is string'
- 'output.containers is not defined'
- 'output.networks[0].Id is string'
- 'output.networks[0].Created is not defined'
- 'output.volumes is not defined'
- 'output.images is not defined'
- 'output.disk_usage is not defined'
- name: Get info on Docker host and list networks with verbose output
docker_host_info:
networks: true
verbose_output: true
register: output
- name: Get info on Docker host and list networks with verbose output
docker_host_info:
networks: true
verbose_output: true
register: output
- name: assert reading docker host facts when docker is running and list networks with verbose output
assert:
that:
- 'output.host_info.Name is string'
- 'output.containers is not defined'
- 'output.networks[0].Id is string'
- 'output.networks[0].Created is string'
- 'output.volumes is not defined'
- 'output.images is not defined'
- 'output.disk_usage is not defined'
- name: assert reading docker host facts when docker is running and list networks with verbose output
assert:
that:
- 'output.host_info.Name is string'
- 'output.containers is not defined'
- 'output.networks[0].Id is string'
- 'output.networks[0].Created is string'
- 'output.volumes is not defined'
- 'output.images is not defined'
- 'output.disk_usage is not defined'
- name: Get info on Docker host and list volumes
docker_host_info:
volumes: true
register: output
- name: Get info on Docker host and list volumes
docker_host_info:
volumes: true
register: output
- name: assert reading docker host facts when docker is running and list volumes
assert:
that:
- 'output.host_info.Name is string'
- 'output.containers is not defined'
- 'output.networks is not defined'
- 'output.volumes[0].Name is string'
- 'output.volumes[0].Mountpoint is not defined'
- 'output.images is not defined'
- 'output.disk_usage is not defined'
- name: assert reading docker host facts when docker is running and list volumes
assert:
that:
- 'output.host_info.Name is string'
- 'output.containers is not defined'
- 'output.networks is not defined'
- 'output.volumes[0].Name is string'
- 'output.volumes[0].Mountpoint is not defined'
- 'output.images is not defined'
- 'output.disk_usage is not defined'
- name: Get info on Docker host and list volumes with verbose output
docker_host_info:
volumes: true
verbose_output: true
register: output
- name: Get info on Docker host and list volumes with verbose output
docker_host_info:
volumes: true
verbose_output: true
register: output
- name: assert reading docker host facts when docker is running and list volumes with verbose output
assert:
that:
- 'output.host_info.Name is string'
- 'output.containers is not defined'
- 'output.networks is not defined'
- 'output.volumes[0].Name is string'
- 'output.volumes[0].Mountpoint is string'
- 'output.images is not defined'
- 'output.disk_usage is not defined'
- name: assert reading docker host facts when docker is running and list volumes with verbose output
assert:
that:
- 'output.host_info.Name is string'
- 'output.containers is not defined'
- 'output.networks is not defined'
- 'output.volumes[0].Name is string'
- 'output.volumes[0].Mountpoint is string'
- 'output.images is not defined'
- 'output.disk_usage is not defined'
- name: Get info on Docker host and get disk usage
docker_host_info:
disk_usage: true
register: output
- name: Get info on Docker host and get disk usage
docker_host_info:
disk_usage: true
register: output
- name: assert reading docker host facts when docker is running and get disk usage
assert:
that:
- 'output.host_info.Name is string'
- 'output.containers is not defined'
- 'output.networks is not defined'
- 'output.volumes is not defined'
- 'output.images is not defined'
- 'output.disk_usage.LayersSize is number'
- 'output.disk_usage.Images is not defined'
- 'output.disk_usage.Containers is not defined'
- 'output.disk_usage.Volumes is not defined'
- name: assert reading docker host facts when docker is running and get disk usage
assert:
that:
- 'output.host_info.Name is string'
- 'output.containers is not defined'
- 'output.networks is not defined'
- 'output.volumes is not defined'
- 'output.images is not defined'
- 'output.disk_usage.LayersSize is number'
- 'output.disk_usage.Images is not defined'
- 'output.disk_usage.Containers is not defined'
- 'output.disk_usage.Volumes is not defined'
- name: Get info on Docker host and get disk usage with verbose output
docker_host_info:
disk_usage: true
verbose_output: true
register: output
- name: Get info on Docker host and get disk usage with verbose output
docker_host_info:
disk_usage: true
verbose_output: true
register: output
- name: assert reading docker host facts when docker is running and get disk usage with verbose output
assert:
that:
- 'output.host_info.Name is string'
- 'output.containers is not defined'
- 'output.networks is not defined'
- 'output.volumes is not defined'
- 'output.images is not defined'
- 'output.disk_usage.LayersSize is number'
- 'output.disk_usage.Images is sequence'
- 'output.disk_usage.Containers is sequence'
- 'output.disk_usage.Volumes is sequence'
- name: assert reading docker host facts when docker is running and get disk usage with verbose output
assert:
that:
- 'output.host_info.Name is string'
- 'output.containers is not defined'
- 'output.networks is not defined'
- 'output.volumes is not defined'
- 'output.images is not defined'
- 'output.disk_usage.LayersSize is number'
- 'output.disk_usage.Images is sequence'
- 'output.disk_usage.Containers is sequence'
- 'output.disk_usage.Volumes is sequence'
- name: Get info on Docker host, disk usage and get all lists together
docker_host_info:
volumes: true
containers: true
networks: true
images: true
disk_usage: true
register: output
- name: Get info on Docker host, disk usage and get all lists together
docker_host_info:
volumes: true
containers: true
networks: true
images: true
disk_usage: true
register: output
- name: assert reading docker host facts when docker is running, disk usage and get lists together
assert:
that:
- 'output.host_info.Name is string'
- 'output.containers[0].Image is string'
- 'output.containers[0].ImageID is not defined'
- 'output.networks[0].Id is string'
- 'output.networks[0].Created is not defined'
- 'output.volumes[0].Name is string'
- 'output.volumes[0].Mountpoint is not defined'
- 'output.images[0].Id is string'
- 'output.images[0].ParentId is not defined'
- 'output.disk_usage.LayersSize is number'
- 'output.disk_usage.Images is not defined'
- 'output.disk_usage.Containers is not defined'
- 'output.disk_usage.Volumes is not defined'
- name: assert reading docker host facts when docker is running, disk usage and get lists together
assert:
that:
- 'output.host_info.Name is string'
- 'output.containers[0].Image is string'
- 'output.containers[0].ImageID is not defined'
- 'output.networks[0].Id is string'
- 'output.networks[0].Created is not defined'
- 'output.volumes[0].Name is string'
- 'output.volumes[0].Mountpoint is not defined'
- 'output.images[0].Id is string'
- 'output.images[0].ParentId is not defined'
- 'output.disk_usage.LayersSize is number'
- 'output.disk_usage.Images is not defined'
- 'output.disk_usage.Containers is not defined'
- 'output.disk_usage.Volumes is not defined'
- name: Get info on Docker host, disk usage and get all lists together with verbose output
docker_host_info:
volumes: true
containers: true
networks: true
images: true
disk_usage: true
verbose_output: true
register: output
- name: Get info on Docker host, disk usage and get all lists together with verbose output
docker_host_info:
volumes: true
containers: true
networks: true
images: true
disk_usage: true
verbose_output: true
register: output
- name: assert reading docker host facts when docker is running and get disk usage with verbose output
assert:
that:
- 'output.host_info.Name is string'
- 'output.containers[0].Image is string'
- 'output.containers[0].ImageID is string'
- 'output.networks[0].Id is string'
- 'output.networks[0].Created is string'
- 'output.volumes[0].Name is string'
- 'output.volumes[0].Mountpoint is string'
- 'output.images[0].Id is string'
- 'output.images[0].ParentId is string'
- 'output.disk_usage.LayersSize is number'
- 'output.disk_usage.Images is sequence'
- 'output.disk_usage.Containers is sequence'
- 'output.disk_usage.Volumes is sequence'
- name: assert reading docker host facts when docker is running and get disk usage with verbose output
assert:
that:
- 'output.host_info.Name is string'
- 'output.containers[0].Image is string'
- 'output.containers[0].ImageID is string'
- 'output.networks[0].Id is string'
- 'output.networks[0].Created is string'
- 'output.volumes[0].Name is string'
- 'output.volumes[0].Mountpoint is string'
- 'output.images[0].Id is string'
- 'output.images[0].ParentId is string'
- 'output.disk_usage.LayersSize is number'
- 'output.disk_usage.Images is sequence'
- 'output.disk_usage.Containers is sequence'
- 'output.disk_usage.Volumes is sequence'
always:
- name: Delete containers
docker_container:
name: "{{ item }}"
state: absent
force_kill: true
loop:
- "{{ cname }}"
- "{{ cname2 }}"
- name: Delete containers
docker_container:
name: "{{ item }}"
state: absent
force_kill: true
loop:
- "{{ cname }}"
- "{{ cname2 }}"
- name: Delete volume
docker_volume:
name: "{{ vname }}"
state: absent
- name: Delete volume
docker_volume:
name: "{{ vname }}"
state: absent

View File

@ -22,7 +22,7 @@
- assert:
that:
- absent_2 is not changed
- absent_2 is not changed
- name: Make sure image is there
docker_image:
@ -44,8 +44,8 @@
- assert:
that:
- present_1 is changed
- present_2 is not changed
- present_1 is changed
- present_2 is not changed
- name: Make sure tag is not there
docker_image:
@ -83,10 +83,10 @@
- assert:
that:
- tag_1 is changed
- tag_2 is not changed
- tag_3 is not changed
- tag_4 is not changed
- tag_1 is changed
- tag_2 is not changed
- tag_3 is not changed
- tag_4 is not changed
- name: Cleanup alias tag
docker_image:
@ -129,11 +129,11 @@
- assert:
that:
- fail_1 is failed
- "'`repository` must not be an image ID' in fail_1.msg"
- fail_2 is failed
- "'Cannot push an image by ID' in fail_2.msg"
- fail_3 is failed
- "'Image name must not be an image ID for source=pull' in fail_3.msg"
- fail_4 is failed
- "'Image name must not be an image ID for source=build' in fail_4.msg"
- fail_1 is failed
- "'`repository` must not be an image ID' in fail_1.msg"
- fail_2 is failed
- "'Cannot push an image by ID' in fail_2.msg"
- fail_3 is failed
- "'Image name must not be an image ID for source=pull' in fail_3.msg"
- fail_4 is failed
- "'Image name must not be an image ID for source=build' in fail_4.msg"

View File

@ -61,9 +61,9 @@
- assert:
that:
- push_1 is changed
- push_2 is not changed
- push_3 is not changed
- push_1 is changed
- push_2 is not changed
- push_3 is not changed
- name: Get facts of local image
docker_image_info:
@ -102,11 +102,11 @@
- assert:
that:
- pull_1 is changed
- pull_2 is not changed
- facts_1.images | length == 1
- facts_2.images | length == 0
- facts_3.images | length == 1
- pull_1 is changed
- pull_2 is not changed
- facts_1.images | length == 1
- facts_2.images | length == 0
- facts_3.images | length == 1
- name: Pull image from test registry (with digest)
docker_image:
@ -148,8 +148,8 @@
- assert:
that:
- push_1_different is changed
- push_2_different is not changed
- push_1_different is changed
- push_2_different is not changed
- name: Tag same image with new tag
docker_image:
@ -178,24 +178,24 @@
- assert:
that:
# NOTE: This should be:
# - push_1_same is changed
# Unfortunately docker does *NOT* report whether the tag already existed or not.
# Here are the logs returned by client.push() for both tasks (which are exactly the same):
# push_1_same:
# {"status": "The push refers to repository [localhost:32796/test/hello-world]"},
# {"id": "3fc64803ca2d", "progressDetail": {}, "status": "Preparing"},
# {"id": "3fc64803ca2d", "progressDetail": {}, "status": "Layer already exists"},
# {"status": "newtag2: digest: sha256:92251458088c638061cda8fd8b403b76d661a4dc6b7ee71b6affcf1872557b2b size: 528"},
# {"aux": {"Digest": "sha256:92251458088c638061cda8fd8b403b76d661a4dc6b7ee71b6affcf1872557b2b", "Size": 528, "Tag": "newtag2"}, "progressDetail": {}}
# push_2_same:
# {"status": "The push refers to repository [localhost:32796/test/hello-world]"},
# {"id": "3fc64803ca2d", "progressDetail": {}, "status": "Preparing"},
# {"id": "3fc64803ca2d", "progressDetail": {}, "status": "Layer already exists"},
# {"status": "newtag2: digest: sha256:92251458088c638061cda8fd8b403b76d661a4dc6b7ee71b6affcf1872557b2b size: 528"},
# {"aux": {"Digest": "sha256:92251458088c638061cda8fd8b403b76d661a4dc6b7ee71b6affcf1872557b2b", "Size": 528, "Tag": "newtag2"}, "progressDetail": {}}
- push_1_same is not changed
- push_2_same is not changed
# NOTE: This should be:
# - push_1_same is changed
# Unfortunately docker does *NOT* report whether the tag already existed or not.
# Here are the logs returned by client.push() for both tasks (which are exactly the same):
# push_1_same:
# {"status": "The push refers to repository [localhost:32796/test/hello-world]"},
# {"id": "3fc64803ca2d", "progressDetail": {}, "status": "Preparing"},
# {"id": "3fc64803ca2d", "progressDetail": {}, "status": "Layer already exists"},
# {"status": "newtag2: digest: sha256:92251458088c638061cda8fd8b403b76d661a4dc6b7ee71b6affcf1872557b2b size: 528"},
# {"aux": {"Digest": "sha256:92251458088c638061cda8fd8b403b76d661a4dc6b7ee71b6affcf1872557b2b", "Size": 528, "Tag": "newtag2"}, "progressDetail": {}}
# push_2_same:
# {"status": "The push refers to repository [localhost:32796/test/hello-world]"},
# {"id": "3fc64803ca2d", "progressDetail": {}, "status": "Preparing"},
# {"id": "3fc64803ca2d", "progressDetail": {}, "status": "Layer already exists"},
# {"status": "newtag2: digest: sha256:92251458088c638061cda8fd8b403b76d661a4dc6b7ee71b6affcf1872557b2b size: 528"},
# {"aux": {"Digest": "sha256:92251458088c638061cda8fd8b403b76d661a4dc6b7ee71b6affcf1872557b2b", "Size": 528, "Tag": "newtag2"}, "progressDetail": {}}
- push_1_same is not changed
- push_2_same is not changed
####################################################################
## repository ######################################################
@ -241,10 +241,10 @@
- assert:
that:
- repository_1 is changed
- repository_2 is not changed
- repository_3 is changed
- repository_4 is not changed
- repository_1 is changed
- repository_2 is not changed
- repository_3 is changed
- repository_4 is not changed
- name: Get facts of image
docker_image_info:
@ -259,4 +259,4 @@
- assert:
that:
- facts_1.images | length == 1
- facts_1.images | length == 1

View File

@ -63,8 +63,8 @@
- assert:
that:
- buildargs_1 is changed
- buildargs_2 is not failed and buildargs_2 is not changed
- buildargs_1 is changed
- buildargs_2 is not failed and buildargs_2 is not changed
####################################################################
## build.container_limits ##########################################
@ -102,14 +102,14 @@
- assert:
that:
# It *sometimes* happens that the first task does not fail.
# For now, we work around this by
# a) requiring that if it fails, the message must
# contain 'Minimum memory limit allowed is (4|6)MB', and
# b) requiring that either the first task, or the second
# task is changed, but not both.
- "not container_limits_1 is failed or ('Minimum memory limit allowed is ') in container_limits_1.msg"
- "container_limits_1 is changed or container_limits_2 is changed and not (container_limits_1 is changed and container_limits_2 is changed)"
# It *sometimes* happens that the first task does not fail.
# For now, we work around this by
# a) requiring that if it fails, the message must
# contain 'Minimum memory limit allowed is (4|6)MB', and
# b) requiring that either the first task, or the second
# task is changed, but not both.
- "not container_limits_1 is failed or ('Minimum memory limit allowed is ') in container_limits_1.msg"
- "container_limits_1 is changed or container_limits_2 is changed and not (container_limits_1 is changed and container_limits_2 is changed)"
####################################################################
## build.dockerfile ################################################
@ -133,9 +133,9 @@
- assert:
that:
- dockerfile_1 is changed
- "('FROM ' ~ docker_test_image_alpine) in dockerfile_1.stdout"
- dockerfile_1['image']['Config']['WorkingDir'] == '/newdata'
- dockerfile_1 is changed
- "('FROM ' ~ docker_test_image_alpine) in dockerfile_1.stdout"
- dockerfile_1['image']['Config']['WorkingDir'] == '/newdata'
####################################################################
## build.platform ##################################################
@ -177,8 +177,8 @@
- assert:
that:
- platform_1 is changed
- platform_2 is not failed and platform_2 is not changed
- platform_1 is changed
- platform_2 is not failed and platform_2 is not changed
####################################################################
## force ###########################################################
@ -222,8 +222,8 @@
- assert:
that:
- force_1 is changed
- force_2 is not changed
- force_1 is changed
- force_2 is not changed
####################################################################
## load path #######################################################
@ -350,15 +350,15 @@
- assert:
that:
- load_image is changed
- archive_image['image']['Id'] == load_image['image']['Id']
- load_image_1 is not changed
- load_image_2 is failed
- >-
("The archive did not contain image 'foo:bar'. Instead, found '" ~ docker_test_image_hello_world ~ "'.") == load_image_2.msg
- load_image_3 is failed
- '"Detected no loaded images. Archive potentially corrupt?" == load_image_3.msg'
- load_image_4 is not changed
- load_image is changed
- archive_image['image']['Id'] == load_image['image']['Id']
- load_image_1 is not changed
- load_image_2 is failed
- >-
("The archive did not contain image 'foo:bar'. Instead, found '" ~ docker_test_image_hello_world ~ "'.") == load_image_2.msg
- load_image_3 is failed
- '"Detected no loaded images. Archive potentially corrupt?" == load_image_3.msg'
- load_image_4 is not changed
####################################################################
## build.path ######################################################
@ -416,8 +416,8 @@
- assert:
that:
- dockerfile_2 is changed
- dockerfile_2.image.Config.WorkingDir == '/first'
- dockerfile_2 is changed
- dockerfile_2.image.Config.WorkingDir == '/first'
####################################################################
## build.etc_hosts #################################################

View File

@ -51,8 +51,8 @@
- assert:
that:
- buildargs_1 is changed
- buildargs_2 is not changed
- buildargs_1 is changed
- buildargs_2 is not changed
####################################################################
## dockerfile ######################################################
@ -72,9 +72,9 @@
- assert:
that:
- dockerfile_1 is changed
- "('FROM ' ~ docker_test_image_alpine) in dockerfile_1.stderr"
- dockerfile_1['image']['Config']['WorkingDir'] == '/newdata'
- dockerfile_1 is changed
- "('FROM ' ~ docker_test_image_alpine) in dockerfile_1.stderr"
- dockerfile_1['image']['Config']['WorkingDir'] == '/newdata'
####################################################################
## platform ########################################################
@ -106,8 +106,8 @@
- assert:
that:
- platform_1 is changed
- platform_2 is not changed
- platform_1 is changed
- platform_2 is not changed
####################################################################
## target ##########################################################
@ -128,8 +128,8 @@
- assert:
that:
- dockerfile_2 is changed
- dockerfile_2.image.Config.WorkingDir == '/first'
- dockerfile_2 is changed
- dockerfile_2.image.Config.WorkingDir == '/first'
####################################################################
## etc_hosts #######################################################

View File

@ -9,50 +9,50 @@
####################################################################
- block:
- name: Make sure image is not there
docker_image_remove:
name: "{{ docker_test_image_alpine_different }}"
- name: Make sure image is not there
docker_image_remove:
name: "{{ docker_test_image_alpine_different }}"
- name: Inspect a non-available image
docker_image_info:
name: "{{ docker_test_image_alpine_different }}"
register: result
- name: Inspect a non-available image
docker_image_info:
name: "{{ docker_test_image_alpine_different }}"
register: result
- assert:
that:
- "result.images|length == 0"
- assert:
that:
- "result.images|length == 0"
- name: Make sure images are there
docker_image_pull:
name: "{{ item }}"
loop:
- "{{ docker_test_image_hello_world }}"
- "{{ docker_test_image_alpine }}"
- name: Make sure images are there
docker_image_pull:
name: "{{ item }}"
loop:
- "{{ docker_test_image_hello_world }}"
- "{{ docker_test_image_alpine }}"
- name: Inspect an available image
docker_image_info:
name: "{{ docker_test_image_hello_world }}"
register: result
- name: Inspect an available image
docker_image_info:
name: "{{ docker_test_image_hello_world }}"
register: result
- assert:
that:
- "result.images|length == 1"
- "docker_test_image_hello_world in result.images[0].RepoTags"
- assert:
that:
- "result.images|length == 1"
- "docker_test_image_hello_world in result.images[0].RepoTags"
- name: Inspect multiple images
docker_image_info:
name:
- "{{ docker_test_image_hello_world }}"
- "{{ docker_test_image_alpine }}"
register: result
- name: Inspect multiple images
docker_image_info:
name:
- "{{ docker_test_image_hello_world }}"
- "{{ docker_test_image_alpine }}"
register: result
- debug: var=result
- debug: var=result
- assert:
that:
- "result.images|length == 2"
- "docker_test_image_hello_world in result.images[0].RepoTags"
- "docker_test_image_alpine in result.images[1].RepoTags"
- assert:
that:
- "result.images|length == 2"
- "docker_test_image_hello_world in result.images[0].RepoTags"
- "docker_test_image_alpine in result.images[1].RepoTags"
when: docker_api_version is version('1.25', '>=')

View File

@ -117,55 +117,55 @@
- assert:
that:
- present_1_check is changed
- present_1_check.actions | length == 1
- present_1_check.actions[0] == ('Pulled image ' ~ image_name)
- present_1_check.diff.before.exists is false
- present_1_check.diff.after.id == 'unknown'
- present_1 is changed
- present_1.actions | length == 1
- present_1.actions[0] == ('Pulled image ' ~ image_name)
- present_1.diff.before.exists is false
- present_1.diff.after.id is string
- present_2_check is changed
- present_2_check.actions | length == 1
- present_2_check.actions[0] == ('Pulled image ' ~ image_name)
- present_2_check.diff.before.id == present_1.diff.after.id
- present_2_check.diff.after.id == 'unknown'
- present_2 is not changed
- present_2.actions | length == 1
- present_2.actions[0] == ('Pulled image ' ~ image_name)
- present_2.diff.before.id == present_1.diff.after.id
- present_2.diff.after.id == present_1.diff.after.id
- present_3_check is changed
- present_3_check.actions | length == 1
- present_3_check.actions[0] == ('Pulled image ' ~ image_name)
- present_3_check.diff.before.id == present_1.diff.after.id
- present_3_check.diff.after.id == 'unknown'
- present_3 is changed
- present_3.actions | length == 1
- present_3.actions[0] == ('Pulled image ' ~ image_name)
- present_3.diff.before.id == present_1.diff.after.id
- present_3.diff.after.id != present_1.diff.after.id
- present_3.diff.after.id is string
- present_4_check is not changed
- present_4_check.actions | length == 0
- present_4_check.diff.before.id == present_3.diff.after.id
- present_4_check.diff.after.id == present_3.diff.after.id
- present_4 is not changed
- present_4.actions | length == 0
- present_4.diff.before.id == present_3.diff.after.id
- present_4.diff.after.id == present_3.diff.after.id
- present_5_check is changed
- present_5_check.actions | length == 1
- present_5_check.actions[0] == ('Pulled image ' ~ image_name)
- present_5_check.diff.before.id == present_3.diff.after.id
- present_5_check.diff.after.id == 'unknown'
- present_5 is changed
- present_5.actions | length == 1
- present_5.actions[0] == ('Pulled image ' ~ image_name)
- present_5.diff.before.id == present_3.diff.after.id
- present_5.diff.after.id == present_1.diff.after.id
- present_1_check is changed
- present_1_check.actions | length == 1
- present_1_check.actions[0] == ('Pulled image ' ~ image_name)
- present_1_check.diff.before.exists is false
- present_1_check.diff.after.id == 'unknown'
- present_1 is changed
- present_1.actions | length == 1
- present_1.actions[0] == ('Pulled image ' ~ image_name)
- present_1.diff.before.exists is false
- present_1.diff.after.id is string
- present_2_check is changed
- present_2_check.actions | length == 1
- present_2_check.actions[0] == ('Pulled image ' ~ image_name)
- present_2_check.diff.before.id == present_1.diff.after.id
- present_2_check.diff.after.id == 'unknown'
- present_2 is not changed
- present_2.actions | length == 1
- present_2.actions[0] == ('Pulled image ' ~ image_name)
- present_2.diff.before.id == present_1.diff.after.id
- present_2.diff.after.id == present_1.diff.after.id
- present_3_check is changed
- present_3_check.actions | length == 1
- present_3_check.actions[0] == ('Pulled image ' ~ image_name)
- present_3_check.diff.before.id == present_1.diff.after.id
- present_3_check.diff.after.id == 'unknown'
- present_3 is changed
- present_3.actions | length == 1
- present_3.actions[0] == ('Pulled image ' ~ image_name)
- present_3.diff.before.id == present_1.diff.after.id
- present_3.diff.after.id != present_1.diff.after.id
- present_3.diff.after.id is string
- present_4_check is not changed
- present_4_check.actions | length == 0
- present_4_check.diff.before.id == present_3.diff.after.id
- present_4_check.diff.after.id == present_3.diff.after.id
- present_4 is not changed
- present_4.actions | length == 0
- present_4.diff.before.id == present_3.diff.after.id
- present_4.diff.after.id == present_3.diff.after.id
- present_5_check is changed
- present_5_check.actions | length == 1
- present_5_check.actions[0] == ('Pulled image ' ~ image_name)
- present_5_check.diff.before.id == present_3.diff.after.id
- present_5_check.diff.after.id == 'unknown'
- present_5 is changed
- present_5.actions | length == 1
- present_5.actions[0] == ('Pulled image ' ~ image_name)
- present_5.diff.before.id == present_3.diff.after.id
- present_5.diff.after.id == present_1.diff.after.id
always:
- name: cleanup
@ -188,9 +188,9 @@
- assert:
that:
- fail_1 is failed
- >-
'Cannot pull an image by ID' == fail_1.msg
- fail_2 is failed
- >-
'"foo/bar" is not a valid docker tag!' == fail_2.msg
- fail_1 is failed
- >-
'Cannot pull an image by ID' == fail_1.msg
- fail_2 is failed
- >-
'"foo/bar" is not a valid docker tag!' == fail_2.msg

View File

@ -35,20 +35,20 @@
- assert:
that:
- present_1 is changed
- present_1.actions | length == 1
- present_1.actions[0] == ('Pulled image ' ~ docker_test_image_digest_base ~ ':sha256:' ~ docker_test_image_digest_v1)
- present_1.diff.before.exists is false
- present_1.diff.after.id is string
- present_2 is not changed
- present_2.actions | length == 1
- present_2.actions[0] == ('Pulled image ' ~ docker_test_image_digest_base ~ ':sha256:' ~ docker_test_image_digest_v1)
- present_2.diff.before.id == present_1.diff.after.id
- present_2.diff.after.id == present_1.diff.after.id
- present_3 is not changed
- present_3.actions | length == 0
- present_3.diff.before.id == present_1.diff.after.id
- present_3.diff.after.id == present_1.diff.after.id
- present_1 is changed
- present_1.actions | length == 1
- present_1.actions[0] == ('Pulled image ' ~ docker_test_image_digest_base ~ ':sha256:' ~ docker_test_image_digest_v1)
- present_1.diff.before.exists is false
- present_1.diff.after.id is string
- present_2 is not changed
- present_2.actions | length == 1
- present_2.actions[0] == ('Pulled image ' ~ docker_test_image_digest_base ~ ':sha256:' ~ docker_test_image_digest_v1)
- present_2.diff.before.id == present_1.diff.after.id
- present_2.diff.after.id == present_1.diff.after.id
- present_3 is not changed
- present_3.actions | length == 0
- present_3.diff.before.id == present_1.diff.after.id
- present_3.diff.after.id == present_1.diff.after.id
- name: Pull image 2 (check mode)
docker_image_pull:
@ -67,17 +67,17 @@
- assert:
that:
- present_4 is changed
- present_4.actions | length == 1
- present_4.actions[0] == ('Pulled image ' ~ docker_test_image_digest_base ~ ':sha256:' ~ docker_test_image_digest_v2)
- present_4.diff.before.exists is false
- present_4.diff.after.id == 'unknown'
- present_5 is changed
- present_5.actions | length == 1
- present_5.actions[0] == ('Pulled image ' ~ docker_test_image_digest_base ~ ':sha256:' ~ docker_test_image_digest_v2)
- present_5.diff.before.exists is false
- present_5.diff.after.id != present_1.diff.after.id
- present_5.diff.after.id is string
- present_4 is changed
- present_4.actions | length == 1
- present_4.actions[0] == ('Pulled image ' ~ docker_test_image_digest_base ~ ':sha256:' ~ docker_test_image_digest_v2)
- present_4.diff.before.exists is false
- present_4.diff.after.id == 'unknown'
- present_5 is changed
- present_5.actions | length == 1
- present_5.actions[0] == ('Pulled image ' ~ docker_test_image_digest_base ~ ':sha256:' ~ docker_test_image_digest_v2)
- present_5.diff.before.exists is false
- present_5.diff.after.id != present_1.diff.after.id
- present_5.diff.after.id is string
always:
- name: cleanup

View File

@ -103,24 +103,24 @@
- assert:
that:
- pull_1_check is changed
- pull_1_check.diff.before.exists is false
- pull_1_check.diff.after.id == 'unknown'
- pull_1 is changed
- pull_1.diff.before.exists is false
- pull_1.diff.after.id == facts_1.images[0].Id
- pull_2_check is not changed
- pull_2_check.diff.before.id == facts_1.images[0].Id
- pull_2_check.diff.before == pull_2.diff.after
- pull_2 is not changed
- pull_2.diff.before.id == facts_1.images[0].Id
- pull_2.diff.before == pull_2.diff.after
- pull_3_check is changed
- pull_3_check.diff.before.id == facts_1.images[0].Id
- pull_3_check.diff.after.id == 'unknown'
- pull_3 is not changed
- pull_3.diff.before.id == facts_1.images[0].Id
- pull_3.diff.before == pull_2.diff.after
- facts_1.images | length == 1
- facts_2.images | length == 0
- facts_3.images | length == 1
- pull_1_check is changed
- pull_1_check.diff.before.exists is false
- pull_1_check.diff.after.id == 'unknown'
- pull_1 is changed
- pull_1.diff.before.exists is false
- pull_1.diff.after.id == facts_1.images[0].Id
- pull_2_check is not changed
- pull_2_check.diff.before.id == facts_1.images[0].Id
- pull_2_check.diff.before == pull_2.diff.after
- pull_2 is not changed
- pull_2.diff.before.id == facts_1.images[0].Id
- pull_2.diff.before == pull_2.diff.after
- pull_3_check is changed
- pull_3_check.diff.before.id == facts_1.images[0].Id
- pull_3_check.diff.after.id == 'unknown'
- pull_3 is not changed
- pull_3.diff.before.id == facts_1.images[0].Id
- pull_3.diff.before == pull_2.diff.after
- facts_1.images | length == 1
- facts_2.images | length == 0
- facts_3.images | length == 1

View File

@ -43,18 +43,18 @@
- assert:
that:
- fail_1 is failed
- >-
'Cannot find image registry.example.com:5000/foo/bar:baz' == fail_1.msg
- fail_2 is failed
- >-
'Cannot push an image by ID' == fail_2.msg
- fail_3 is failed
- >-
'Cannot push an image by digest' == fail_3.msg
- fail_4 is failed
- >-
'"foo/bar" is not a valid docker tag!' == fail_4.msg
- fail_5 is failed
- >-
'"foo bar" is not a valid docker tag!' == fail_5.msg
- fail_1 is failed
- >-
'Cannot find image registry.example.com:5000/foo/bar:baz' == fail_1.msg
- fail_2 is failed
- >-
'Cannot push an image by ID' == fail_2.msg
- fail_3 is failed
- >-
'Cannot push an image by digest' == fail_3.msg
- fail_4 is failed
- >-
'"foo/bar" is not a valid docker tag!' == fail_4.msg
- fail_5 is failed
- >-
'"foo bar" is not a valid docker tag!' == fail_5.msg

View File

@ -4,147 +4,147 @@
# SPDX-License-Identifier: GPL-3.0-or-later
- block:
- name: Log out server
docker_login:
registry_url: "{{ registry_frontend_address }}"
username: testuser
password: hunter2
state: absent
- name: Log out server
docker_login:
registry_url: "{{ registry_frontend_address }}"
username: testuser
password: hunter2
state: absent
- name: Log in with wrong password (check mode)
docker_login:
registry_url: "{{ registry_frontend_address }}"
username: testuser
password: "1234"
state: present
register: login_failed_check
ignore_errors: true
check_mode: true
- name: Log in with wrong password (check mode)
docker_login:
registry_url: "{{ registry_frontend_address }}"
username: testuser
password: "1234"
state: present
register: login_failed_check
ignore_errors: true
check_mode: true
- name: Log in with wrong password
docker_login:
registry_url: "{{ registry_frontend_address }}"
username: testuser
password: "1234"
state: present
register: login_failed
ignore_errors: true
- name: Log in with wrong password
docker_login:
registry_url: "{{ registry_frontend_address }}"
username: testuser
password: "1234"
state: present
register: login_failed
ignore_errors: true
- name: Make sure that login failed
assert:
that:
- login_failed_check is failed
- "('login attempt to http://' ~ registry_frontend_address ~ '/v2/ failed') in login_failed_check.msg"
- login_failed is failed
- "('login attempt to http://' ~ registry_frontend_address ~ '/v2/ failed') in login_failed.msg"
- name: Make sure that login failed
assert:
that:
- login_failed_check is failed
- "('login attempt to http://' ~ registry_frontend_address ~ '/v2/ failed') in login_failed_check.msg"
- login_failed is failed
- "('login attempt to http://' ~ registry_frontend_address ~ '/v2/ failed') in login_failed.msg"
- name: Log in (check mode)
docker_login:
registry_url: "{{ registry_frontend_address }}"
username: testuser
password: hunter2
state: present
register: login_1
check_mode: true
- name: Log in (check mode)
docker_login:
registry_url: "{{ registry_frontend_address }}"
username: testuser
password: hunter2
state: present
register: login_1
check_mode: true
- name: Log in
docker_login:
registry_url: "{{ registry_frontend_address }}"
username: testuser
password: hunter2
state: present
register: login_2
- name: Log in
docker_login:
registry_url: "{{ registry_frontend_address }}"
username: testuser
password: hunter2
state: present
register: login_2
- name: Get permissions of ~/.docker/config.json
stat:
path: ~/.docker/config.json
register: login_2_stat
- name: Get permissions of ~/.docker/config.json
stat:
path: ~/.docker/config.json
register: login_2_stat
- name: Log in (idempotent)
docker_login:
registry_url: "{{ registry_frontend_address }}"
username: testuser
password: hunter2
state: present
register: login_3
- name: Log in (idempotent)
docker_login:
registry_url: "{{ registry_frontend_address }}"
username: testuser
password: hunter2
state: present
register: login_3
- name: Log in (idempotent, check mode)
docker_login:
registry_url: "{{ registry_frontend_address }}"
username: testuser
password: hunter2
state: present
register: login_4
check_mode: true
- name: Log in (idempotent, check mode)
docker_login:
registry_url: "{{ registry_frontend_address }}"
username: testuser
password: hunter2
state: present
register: login_4
check_mode: true
- name: Make sure that login worked
assert:
that:
- login_1 is changed
- login_2 is changed
- login_3 is not changed
- login_4 is not changed
- login_2_stat.stat.mode == '0600'
- name: Make sure that login worked
assert:
that:
- login_1 is changed
- login_2 is changed
- login_3 is not changed
- login_4 is not changed
- login_2_stat.stat.mode == '0600'
- name: Log in again with wrong password (check mode)
docker_login:
registry_url: "{{ registry_frontend_address }}"
username: testuser
password: "1234"
state: present
register: login_failed_check
ignore_errors: true
check_mode: true
- name: Log in again with wrong password (check mode)
docker_login:
registry_url: "{{ registry_frontend_address }}"
username: testuser
password: "1234"
state: present
register: login_failed_check
ignore_errors: true
check_mode: true
- name: Log in again with wrong password
docker_login:
registry_url: "{{ registry_frontend_address }}"
username: testuser
password: "1234"
state: present
register: login_failed
ignore_errors: true
- name: Log in again with wrong password
docker_login:
registry_url: "{{ registry_frontend_address }}"
username: testuser
password: "1234"
state: present
register: login_failed
ignore_errors: true
- name: Make sure that login failed again
assert:
that:
- login_failed_check is failed
- "('login attempt to http://' ~ registry_frontend_address ~ '/v2/ failed') in login_failed_check.msg"
- login_failed is failed
- "('login attempt to http://' ~ registry_frontend_address ~ '/v2/ failed') in login_failed.msg"
- name: Make sure that login failed again
assert:
that:
- login_failed_check is failed
- "('login attempt to http://' ~ registry_frontend_address ~ '/v2/ failed') in login_failed_check.msg"
- login_failed is failed
- "('login attempt to http://' ~ registry_frontend_address ~ '/v2/ failed') in login_failed.msg"
- name: Log out (check mode)
docker_login:
registry_url: "{{ registry_frontend_address }}"
state: absent
register: logout_1
check_mode: true
- name: Log out (check mode)
docker_login:
registry_url: "{{ registry_frontend_address }}"
state: absent
register: logout_1
check_mode: true
- name: Log out
docker_login:
registry_url: "{{ registry_frontend_address }}"
state: absent
register: logout_2
- name: Log out
docker_login:
registry_url: "{{ registry_frontend_address }}"
state: absent
register: logout_2
- name: Log out (idempotent)
docker_login:
registry_url: "{{ registry_frontend_address }}"
state: absent
register: logout_3
- name: Log out (idempotent)
docker_login:
registry_url: "{{ registry_frontend_address }}"
state: absent
register: logout_3
- name: Log out (idempotent, check mode)
docker_login:
registry_url: "{{ registry_frontend_address }}"
state: absent
register: logout_4
check_mode: true
- name: Log out (idempotent, check mode)
docker_login:
registry_url: "{{ registry_frontend_address }}"
state: absent
register: logout_4
check_mode: true
- name: Make sure that login worked
assert:
that:
- logout_1 is changed
- logout_2 is changed
- logout_3 is not changed
- logout_4 is not changed
- name: Make sure that login worked
assert:
that:
- logout_1 is changed
- logout_2 is changed
- logout_3 is not changed
- logout_4 is not changed
when: registry_frontend_address != 'n/a'

View File

@ -4,58 +4,58 @@
# SPDX-License-Identifier: GPL-3.0-or-later
- block:
- name: Log out server 1
docker_login:
registry_url: "{{ registry_frontend_address }}"
username: testuser
password: hunter2
state: absent
- name: Log out server 1
docker_login:
registry_url: "{{ registry_frontend_address }}"
username: testuser
password: hunter2
state: absent
- name: Log out server 2
docker_login:
registry_url: "{{ registry_frontend2_address }}"
username: testuser
password: hunter2
state: absent
- name: Log out server 2
docker_login:
registry_url: "{{ registry_frontend2_address }}"
username: testuser
password: hunter2
state: absent
- name: Log in server 1
docker_login:
registry_url: "{{ registry_frontend_address }}"
username: testuser
password: hunter2
state: present
register: login_1
- name: Log in server 1
docker_login:
registry_url: "{{ registry_frontend_address }}"
username: testuser
password: hunter2
state: present
register: login_1
- name: Log in server 2
docker_login:
registry_url: "{{ registry_frontend2_address }}"
username: testuser
password: hunter2
state: present
register: login_2
- name: Log in server 2
docker_login:
registry_url: "{{ registry_frontend2_address }}"
username: testuser
password: hunter2
state: present
register: login_2
- name: Log in server 1 (idempotent)
docker_login:
registry_url: "{{ registry_frontend_address }}"
username: testuser
password: hunter2
state: present
register: login_1_2
- name: Log in server 1 (idempotent)
docker_login:
registry_url: "{{ registry_frontend_address }}"
username: testuser
password: hunter2
state: present
register: login_1_2
- name: Log in server 2 (idempotent)
docker_login:
registry_url: "{{ registry_frontend2_address }}"
username: testuser
password: hunter2
state: present
register: login_2_2
- name: Log in server 2 (idempotent)
docker_login:
registry_url: "{{ registry_frontend2_address }}"
username: testuser
password: hunter2
state: present
register: login_2_2
- name: Make sure that login worked
assert:
that:
- login_1 is changed
- login_2 is changed
- login_1_2 is not changed
- login_2_2 is not changed
- name: Make sure that login worked
assert:
that:
- login_1 is changed
- login_2 is changed
- login_1_2 is not changed
- login_2_2 is not changed
when: registry_frontend_address != 'n/a' and registry_frontend2_address != 'n/a'

View File

@ -22,9 +22,9 @@
command: /bin/sleep 10m
state: started
loop:
- "{{ cname_1 }}"
- "{{ cname_2 }}"
- "{{ cname_3 }}"
- "{{ cname_1 }}"
- "{{ cname_2 }}"
- "{{ cname_3 }}"
loop_control:
loop_var: container_name
@ -41,7 +41,7 @@
name: "{{ nname_1 }}"
state: present
connected:
- "{{ cname_1 }}"
- "{{ cname_1 }}"
register: networks_2
- name: Connect network to containers 1 (idempotency)
@ -49,7 +49,7 @@
name: "{{ nname_1 }}"
state: present
connected:
- "{{ cname_1 }}"
- "{{ cname_1 }}"
register: networks_2_idem
- name: Connect network to containers 1 and 2
@ -57,8 +57,8 @@
name: "{{ nname_1 }}"
state: present
connected:
- "{{ cname_1 }}"
- "{{ cname_2 }}"
- "{{ cname_1 }}"
- "{{ cname_2 }}"
register: networks_3
- name: Connect network to containers 1 and 2 (idempotency)
@ -66,8 +66,8 @@
name: "{{ nname_1 }}"
state: present
connected:
- "{{ cname_1 }}"
- "{{ cname_2 }}"
- "{{ cname_1 }}"
- "{{ cname_2 }}"
register: networks_3_idem
- name: Connect network to container 3
@ -75,7 +75,7 @@
name: "{{ nname_1 }}"
state: present
connected:
- "{{ cname_3 }}"
- "{{ cname_3 }}"
appends: true
register: networks_4
@ -84,7 +84,7 @@
name: "{{ nname_1 }}"
state: present
connected:
- "{{ cname_3 }}"
- "{{ cname_3 }}"
appends: true
register: networks_4_idem
@ -93,8 +93,8 @@
name: "{{ nname_1 }}"
state: present
connected:
- "{{ cname_2 }}"
- "{{ cname_3 }}"
- "{{ cname_2 }}"
- "{{ cname_3 }}"
register: networks_5
- name: Disconnect network from container 1 (idempotency)
@ -102,8 +102,8 @@
name: "{{ nname_1 }}"
state: present
connected:
- "{{ cname_2 }}"
- "{{ cname_3 }}"
- "{{ cname_2 }}"
- "{{ cname_3 }}"
register: networks_5_idem
- name: Cleanup
@ -113,15 +113,15 @@
- assert:
that:
- networks_1 is changed
- networks_2 is changed
- networks_2_idem is not changed
- networks_3 is changed
- networks_3_idem is not changed
- networks_4 is changed
- networks_4_idem is not changed
- networks_5 is changed
- networks_5_idem is not changed
- networks_1 is changed
- networks_2 is changed
- networks_2_idem is not changed
- networks_3 is changed
- networks_3_idem is not changed
- networks_4 is changed
- networks_4_idem is not changed
- networks_5 is changed
- networks_5_idem is not changed
####################################################################
@ -131,8 +131,8 @@
state: absent
force_kill: true
loop:
- "{{ cname_1 }}"
- "{{ cname_2 }}"
- "{{ cname_3 }}"
- "{{ cname_1 }}"
- "{{ cname_2 }}"
- "{{ cname_3 }}"
loop_control:
loop_var: container_name

View File

@ -200,71 +200,71 @@
#################### multiple IPv4 networks ####################
- block:
- name: Create network with two IPv4 IPAM configs
docker_network:
name: "{{ nname_ipam_3 }}"
driver: "macvlan"
driver_options:
parent: "{{ ansible_default_ipv4.alias }}"
ipam_config:
- subnet: 10.26.120.0/24
- subnet: 10.26.121.0/24
register: network
- name: Create network with two IPv4 IPAM configs
docker_network:
name: "{{ nname_ipam_3 }}"
driver: "macvlan"
driver_options:
parent: "{{ ansible_default_ipv4.alias }}"
ipam_config:
- subnet: 10.26.120.0/24
- subnet: 10.26.121.0/24
register: network
- assert:
that:
- network is changed
- assert:
that:
- network is changed
- name: Create network with two IPv4 IPAM configs (idempotence)
docker_network:
name: "{{ nname_ipam_3 }}"
driver: "macvlan"
driver_options:
parent: "{{ ansible_default_ipv4.alias }}"
ipam_config:
- subnet: 10.26.121.0/24
- subnet: 10.26.120.0/24
register: network
- name: Create network with two IPv4 IPAM configs (idempotence)
docker_network:
name: "{{ nname_ipam_3 }}"
driver: "macvlan"
driver_options:
parent: "{{ ansible_default_ipv4.alias }}"
ipam_config:
- subnet: 10.26.121.0/24
- subnet: 10.26.120.0/24
register: network
- assert:
that:
- network is not changed
- assert:
that:
- network is not changed
- name: Create network with two IPv4 IPAM configs (change)
docker_network:
name: "{{ nname_ipam_3 }}"
driver: "macvlan"
driver_options:
parent: "{{ ansible_default_ipv4.alias }}"
ipam_config:
- subnet: 10.26.120.0/24
- subnet: 10.26.122.0/24
register: network
diff: true
- name: Create network with two IPv4 IPAM configs (change)
docker_network:
name: "{{ nname_ipam_3 }}"
driver: "macvlan"
driver_options:
parent: "{{ ansible_default_ipv4.alias }}"
ipam_config:
- subnet: 10.26.120.0/24
- subnet: 10.26.122.0/24
register: network
diff: true
- assert:
that:
- network is changed
- network.diff.differences | length == 1
- assert:
that:
- network is changed
- network.diff.differences | length == 1
- name: Create network with one IPv4 IPAM config (no change)
docker_network:
name: "{{ nname_ipam_3 }}"
driver: "macvlan"
driver_options:
parent: "{{ ansible_default_ipv4.alias }}"
ipam_config:
- subnet: 10.26.122.0/24
register: network
- name: Create network with one IPv4 IPAM config (no change)
docker_network:
name: "{{ nname_ipam_3 }}"
driver: "macvlan"
driver_options:
parent: "{{ ansible_default_ipv4.alias }}"
ipam_config:
- subnet: 10.26.122.0/24
register: network
- assert:
that:
- network is not changed
- assert:
that:
- network is not changed
- name: Cleanup network
docker_network:
name: "{{ nname_ipam_3 }}"
state: absent
- name: Cleanup network
docker_network:
name: "{{ nname_ipam_3 }}"
state: absent
when: ansible_facts.virtualization_type != 'docker' and ansible_default_ipv4.alias is defined

View File

@ -40,9 +40,9 @@
- assert:
that:
- internal_1 is changed
- internal_2 is not changed
- internal_3 is changed
- internal_1 is changed
- internal_2 is not changed
- internal_3 is changed
####################################################################
## driver_options ##################################################
@ -91,62 +91,62 @@
- assert:
that:
- driver_options_1 is changed
- driver_options_2 is not changed
- driver_options_3 is not changed
- driver_options_4 is changed
- driver_options_5 is not changed
- driver_options_1 is changed
- driver_options_2 is not changed
- driver_options_3 is not changed
- driver_options_4 is changed
- driver_options_5 is not changed
####################################################################
## scope ###########################################################
####################################################################
- block:
- name: scope
docker_network:
name: "{{ nname_1 }}"
driver: bridge
scope: local
register: scope_1
- name: scope
docker_network:
name: "{{ nname_1 }}"
driver: bridge
scope: local
register: scope_1
- name: scope (idempotency)
docker_network:
name: "{{ nname_1 }}"
driver: bridge
scope: local
register: scope_2
- name: scope (idempotency)
docker_network:
name: "{{ nname_1 }}"
driver: bridge
scope: local
register: scope_2
- name: swarm
docker_swarm:
state: present
advertise_addr: "{{ ansible_default_ipv4.address | default('127.0.0.1') }}"
- name: swarm
docker_swarm:
state: present
advertise_addr: "{{ ansible_default_ipv4.address | default('127.0.0.1') }}"
# Driver change alongside scope is intentional - bridge doesn't appear to support anything but local, and overlay can't downgrade to local. Additionally, overlay reports as swarm for swarm OR global, so no change is reported in that case.
# Test output indicates that the scope is altered, at least, so manual inspection will be required to verify this going forward, unless we come up with a test driver that supports multiple scopes.
- name: scope (change)
docker_network:
name: "{{ nname_1 }}"
driver: overlay
scope: swarm
register: scope_3
# Driver change alongside scope is intentional - bridge doesn't appear to support anything but local, and overlay can't downgrade to local. Additionally, overlay reports as swarm for swarm OR global, so no change is reported in that case.
# Test output indicates that the scope is altered, at least, so manual inspection will be required to verify this going forward, unless we come up with a test driver that supports multiple scopes.
- name: scope (change)
docker_network:
name: "{{ nname_1 }}"
driver: overlay
scope: swarm
register: scope_3
- name: cleanup network
docker_network:
name: "{{ nname_1 }}"
state: absent
force: true
- name: cleanup network
docker_network:
name: "{{ nname_1 }}"
state: absent
force: true
- assert:
that:
- scope_1 is changed
- scope_2 is not changed
- scope_3 is changed
- assert:
that:
- scope_1 is changed
- scope_2 is not changed
- scope_3 is changed
always:
- name: cleanup swarm
docker_swarm:
state: absent
force: true
- name: cleanup swarm
docker_swarm:
state: absent
force: true
####################################################################
## attachable ######################################################
@ -158,21 +158,21 @@
attachable: true
register: attachable_1
ignore_errors: true
- name: attachable (idempotency)
docker_network:
name: "{{ nname_1 }}"
attachable: true
register: attachable_2
ignore_errors: true
- name: attachable (change)
docker_network:
name: "{{ nname_1 }}"
attachable: false
register: attachable_3
ignore_errors: true
- name: cleanup
docker_network:
name: "{{ nname_1 }}"
@ -181,9 +181,9 @@
- assert:
that:
- attachable_1 is changed
- attachable_2 is not changed
- attachable_3 is changed
- attachable_1 is changed
- attachable_2 is not changed
- attachable_3 is changed
####################################################################
## labels ##########################################################
@ -228,7 +228,7 @@
- assert:
that:
- labels_1 is changed
- labels_2 is not changed
- labels_3 is not changed
- labels_4 is changed
- labels_1 is changed
- labels_2 is not changed
- labels_3 is not changed
- labels_4 is changed

View File

@ -11,94 +11,94 @@
dnetworks: "{{ dnetworks + [nname_1] }}"
- block:
# Overlay networks require swarm initialization before they'll work
- name: swarm
docker_swarm:
state: present
advertise_addr: "{{ ansible_default_ipv4.address | default('127.0.0.1') }}"
# Overlay networks require swarm initialization before they'll work
- name: swarm
docker_swarm:
state: present
advertise_addr: "{{ ansible_default_ipv4.address | default('127.0.0.1') }}"
####################################################################
## overlay #########################################################
####################################################################
####################################################################
## overlay #########################################################
####################################################################
- name: overlay
docker_network:
name: "{{ nname_1 }}"
driver: overlay
driver_options:
com.docker.network.driver.overlay.vxlanid_list: "257"
register: overlay_1
- name: overlay
docker_network:
name: "{{ nname_1 }}"
driver: overlay
driver_options:
com.docker.network.driver.overlay.vxlanid_list: "257"
register: overlay_1
- name: overlay (idempotency)
docker_network:
name: "{{ nname_1 }}"
driver: overlay
driver_options:
com.docker.network.driver.overlay.vxlanid_list: "257"
register: overlay_2
- name: overlay (idempotency)
docker_network:
name: "{{ nname_1 }}"
driver: overlay
driver_options:
com.docker.network.driver.overlay.vxlanid_list: "257"
register: overlay_2
- name: overlay (change)
docker_network:
name: "{{ nname_1 }}"
driver: bridge
register: overlay_3
- name: overlay (change)
docker_network:
name: "{{ nname_1 }}"
driver: bridge
register: overlay_3
- name: cleanup network
docker_network:
name: "{{ nname_1 }}"
state: absent
force: true
- name: cleanup network
docker_network:
name: "{{ nname_1 }}"
state: absent
force: true
- assert:
that:
- overlay_1 is changed
- overlay_2 is not changed
- overlay_3 is changed
- assert:
that:
- overlay_1 is changed
- overlay_2 is not changed
- overlay_3 is changed
####################################################################
## ingress #########################################################
####################################################################
####################################################################
## ingress #########################################################
####################################################################
- name: cleanup default swarm ingress network
docker_network:
name: ingress
state: absent
- name: cleanup default swarm ingress network
docker_network:
name: ingress
state: absent
- name: ingress
docker_network:
name: "{{ nname_1 }}"
driver: overlay
ingress: true
register: ingress_1
- name: ingress
docker_network:
name: "{{ nname_1 }}"
driver: overlay
ingress: true
register: ingress_1
- name: ingress (idempotency)
docker_network:
name: "{{ nname_1 }}"
driver: overlay
ingress: true
register: ingress_2
- name: ingress (idempotency)
docker_network:
name: "{{ nname_1 }}"
driver: overlay
ingress: true
register: ingress_2
- name: ingress (change)
docker_network:
name: "{{ nname_1 }}"
driver: overlay
ingress: false
register: ingress_3
- name: ingress (change)
docker_network:
name: "{{ nname_1 }}"
driver: overlay
ingress: false
register: ingress_3
- name: cleanup network
docker_network:
name: "{{ nname_1 }}"
state: absent
force: true
- name: cleanup network
docker_network:
name: "{{ nname_1 }}"
state: absent
force: true
- assert:
that:
- ingress_1 is changed
- ingress_2 is not changed
- ingress_3 is changed
- assert:
that:
- ingress_1 is changed
- ingress_2 is not changed
- ingress_3 is changed
always:
- name: cleanup swarm
docker_swarm:
state: absent
force: true
- name: cleanup swarm
docker_swarm:
state: absent
force: true

View File

@ -30,12 +30,12 @@
name: "{{ network_name }}"
state: absent
loop:
- "{{ nname_1 }}"
- "{{ nname_2 }}"
- "{{ nname_1 }}"
- "{{ nname_2 }}"
loop_control:
loop_var: network_name
- assert:
that:
- networks_1 is changed
- networks_2 is changed
- networks_1 is changed
- networks_2 is changed

View File

@ -9,70 +9,70 @@
####################################################################
- block:
- name: Create random network name
set_fact:
nname: "{{ 'ansible-docker-test-%0x' % ((2**32) | random) }}"
- name: Create random network name
set_fact:
nname: "{{ 'ansible-docker-test-%0x' % ((2**32) | random) }}"
- name: Make sure network is not there
docker_network:
name: "{{ nname }}"
state: absent
force: true
- name: Make sure network is not there
docker_network:
name: "{{ nname }}"
state: absent
force: true
- name: Inspect a non-present network
docker_network_info:
name: "{{ nname }}"
register: result
- name: Inspect a non-present network
docker_network_info:
name: "{{ nname }}"
register: result
- assert:
that:
- "not result.exists"
- "'network' in result"
- "result.network is none"
- assert:
that:
- "not result.exists"
- "'network' in result"
- "result.network is none"
- name: Make sure network exists
docker_network:
name: "{{ nname }}"
state: present
- name: Make sure network exists
docker_network:
name: "{{ nname }}"
state: present
- name: Inspect a present network
docker_network_info:
name: "{{ nname }}"
register: result
- name: Dump docker_network_info result
debug: var=result
- name: Inspect a present network
docker_network_info:
name: "{{ nname }}"
register: result
- name: Dump docker_network_info result
debug: var=result
- name: "Comparison: use 'docker network inspect'"
command: docker network inspect "{{ nname }}"
register: docker_inspect
ignore_errors: true
- block:
- set_fact:
docker_inspect_result: "{{ docker_inspect.stdout | from_json }}"
- name: Dump docker inspect result
debug: var=docker_inspect_result
when: docker_inspect is not failed
- name: "Comparison: use 'docker network inspect'"
command: docker network inspect "{{ nname }}"
register: docker_inspect
ignore_errors: true
- block:
- set_fact:
docker_inspect_result: "{{ docker_inspect.stdout | from_json }}"
- name: Dump docker inspect result
debug: var=docker_inspect_result
when: docker_inspect is not failed
- name: Cleanup
docker_network:
name: "{{ nname }}"
state: absent
force: true
- name: Cleanup
docker_network:
name: "{{ nname }}"
state: absent
force: true
- assert:
that:
- result.exists
- "'network' in result"
- "result.network is truthy"
- assert:
that:
- result.exists
- "'network' in result"
- "result.network is truthy"
- assert:
that:
- "result.network == docker_inspect_result[0]"
when: docker_inspect is not failed
- assert:
that:
- "'is too new. Maximum supported API version is' in docker_inspect.stderr"
when: docker_inspect is failed
- assert:
that:
- "result.network == docker_inspect_result[0]"
when: docker_inspect is not failed
- assert:
that:
- "'is too new. Maximum supported API version is' in docker_inspect.stderr"
when: docker_inspect is failed
when: docker_api_version is version('1.25', '>=')

View File

@ -10,30 +10,30 @@
# Run the tests
- block:
- include_tasks: test_node.yml
- include_tasks: test_node.yml
always:
- name: Cleanup (trying)
docker_swarm:
state: absent
force: true
diff: false
ignore_errors: true
- name: Cleanup (trying)
docker_swarm:
state: absent
force: true
diff: false
ignore_errors: true
- name: Restart docker daemon
service:
name: docker
state: restarted
become: true
- name: Wait for docker daemon to be fully restarted
command: docker ps
ignore_errors: true
- name: Restart docker daemon
service:
name: docker
state: restarted
become: true
- name: Wait for docker daemon to be fully restarted
command: docker ps
ignore_errors: true
- name: Cleanup
docker_swarm:
state: absent
force: true
diff: false
- name: Cleanup
docker_swarm:
state: absent
force: true
diff: false
when: docker_py_version is version('2.4.0', '>=') and docker_api_version is version('1.25', '>=')

File diff suppressed because it is too large Load Diff

View File

@ -4,89 +4,89 @@
# SPDX-License-Identifier: GPL-3.0-or-later
- block:
- name: Make sure we're not already using Docker swarm
docker_swarm:
state: absent
force: true
- name: Make sure we're not already using Docker swarm
docker_swarm:
state: absent
force: true
- name: Try to get docker_node_info when docker is not running in swarm mode
docker_node_info:
ignore_errors: true
register: output
- name: Try to get docker_node_info when docker is not running in swarm mode
docker_node_info:
ignore_errors: true
register: output
- name: assert failure when called when swarm is not in use or not run on manager node
assert:
that:
- 'output is failed'
- 'output.msg == "Error running docker swarm module: must run on swarm manager node"'
- name: assert failure when called when swarm is not in use or not run on manager node
assert:
that:
- 'output is failed'
- 'output.msg == "Error running docker swarm module: must run on swarm manager node"'
- name: Create a Swarm cluster
docker_swarm:
state: present
advertise_addr: "{{ansible_default_ipv4.address | default('127.0.0.1')}}"
register: output
- name: Create a Swarm cluster
docker_swarm:
state: present
advertise_addr: "{{ansible_default_ipv4.address | default('127.0.0.1')}}"
register: output
- name: assert changed when create a new swarm cluster
assert:
that:
- 'output is changed'
- '(output.actions[0] | regex_search("New Swarm cluster created: ")) is truthy'
- 'output.swarm_facts.JoinTokens.Manager is truthy'
- 'output.swarm_facts.JoinTokens.Worker is truthy'
- name: assert changed when create a new swarm cluster
assert:
that:
- 'output is changed'
- '(output.actions[0] | regex_search("New Swarm cluster created: ")) is truthy'
- 'output.swarm_facts.JoinTokens.Manager is truthy'
- 'output.swarm_facts.JoinTokens.Worker is truthy'
- name: Try to get docker_node_info when docker is running in swarm mode and as manager
docker_node_info:
register: output
- name: Try to get docker_node_info when docker is running in swarm mode and as manager
docker_node_info:
register: output
- name: assert reading docker swarm node facts
assert:
that:
- 'output.nodes | length > 0'
- 'output.nodes[0].ID is string'
- name: assert reading docker swarm node facts
assert:
that:
- 'output.nodes | length > 0'
- 'output.nodes[0].ID is string'
- name: Try to get docker_node_info using the self parameter
docker_node_info:
self: true
register: output
- name: Try to get docker_node_info using the self parameter
docker_node_info:
self: true
register: output
- name: assert reading swarm facts with list of nodes option
assert:
that:
- 'output.nodes | length == 1'
- 'output.nodes[0].ID is string'
- name: assert reading swarm facts with list of nodes option
assert:
that:
- 'output.nodes | length == 1'
- 'output.nodes[0].ID is string'
- name: Get local docker node name
set_fact:
localnodename: "{{ output.nodes[0].Description.Hostname }}"
- name: Get local docker node name
set_fact:
localnodename: "{{ output.nodes[0].Description.Hostname }}"
- name: Try to get docker_node_info using the local node name as parameter
docker_node_info:
name: "{{ localnodename }}"
register: output
- name: Try to get docker_node_info using the local node name as parameter
docker_node_info:
name: "{{ localnodename }}"
register: output
- name: assert reading reading swarm facts and using node filter (random node name)
assert:
that:
- 'output.nodes | length == 1'
- 'output.nodes[0].ID is string'
- name: assert reading reading swarm facts and using node filter (random node name)
assert:
that:
- 'output.nodes | length == 1'
- 'output.nodes[0].ID is string'
- name: Create random name
set_fact:
randomnodename: "{{ 'node-%0x' % ((2**32) | random) }}"
- name: Create random name
set_fact:
randomnodename: "{{ 'node-%0x' % ((2**32) | random) }}"
- name: Try to get docker_node_info using random node name as parameter
docker_node_info:
name: "{{ randomnodename }}"
register: output
- name: Try to get docker_node_info using random node name as parameter
docker_node_info:
name: "{{ randomnodename }}"
register: output
- name: assert reading reading swarm facts and using node filter (random node name)
assert:
that:
- 'output.nodes | length == 0'
- name: assert reading reading swarm facts and using node filter (random node name)
assert:
that:
- 'output.nodes | length == 0'
always:
- name: Cleanup
docker_swarm:
state: absent
force: true
- name: Cleanup
docker_swarm:
state: absent
force: true

View File

@ -126,22 +126,22 @@
- assert:
that:
- create_1_check is changed
- create_1 is changed
- create_2_check is not changed
- create_2 is not changed
- create_3_check is changed
- create_3 is changed
- create_4_check is not changed
- create_4 is not changed
- absent_1_check is changed
- absent_1 is changed
- absent_2_check is not changed
- absent_2 is not changed
- absent_3_check is changed
- absent_3 is changed
- absent_4_check is not changed
- absent_4 is not changed
- create_1_check is changed
- create_1 is changed
- create_2_check is not changed
- create_2 is not changed
- create_3_check is changed
- create_3 is changed
- create_4_check is not changed
- create_4 is not changed
- absent_1_check is changed
- absent_1 is changed
- absent_2_check is not changed
- absent_2 is not changed
- absent_3_check is changed
- absent_3 is changed
- absent_4_check is not changed
- absent_4 is not changed
############ Plugin_Options ############
########################################
@ -186,7 +186,7 @@
- assert:
that:
- create_1 is changed
- create_2 is not changed
- update_1 is changed
- update_2 is not changed
- create_1 is changed
- create_2 is not changed
- update_1 is changed
- update_2 is not changed

View File

@ -66,14 +66,14 @@
- assert:
that:
- create_1 is changed
- create_2 is not changed
- create_3 is changed
- create_4 is not changed
- absent_1 is changed
- absent_2 is not changed
- absent_3 is changed
- absent_4 is not changed
- create_1 is changed
- create_2 is not changed
- create_3 is changed
- create_4 is not changed
- absent_1 is changed
- absent_2 is not changed
- absent_3 is changed
- absent_4 is not changed
- name: Cleanup plugin with an alias
docker_plugin:

View File

@ -15,159 +15,159 @@
vname: "{{ 'ansible-volume-%0x' % ((2**32) | random) }}"
- block:
# Create objects to be pruned
- name: Create container (without volume)
docker_container:
name: "{{ cname }}"
image: "{{ docker_test_image_hello_world }}"
state: present
register: container
- name: Create network
docker_network:
name: "{{ nname }}"
state: present
register: network
- name: Create named volume
docker_volume:
name: "{{ vname }}"
state: present
register: volume
- name: Create anonymous volume
command: docker volume create
register: volume_anon
# Create objects to be pruned
- name: Create container (without volume)
docker_container:
name: "{{ cname }}"
image: "{{ docker_test_image_hello_world }}"
state: present
register: container
- name: Create network
docker_network:
name: "{{ nname }}"
state: present
register: network
- name: Create named volume
docker_volume:
name: "{{ vname }}"
state: present
register: volume
- name: Create anonymous volume
command: docker volume create
register: volume_anon
- name: List volumes
command: docker volume list
- name: List volumes
command: docker volume list
# Prune objects
- name: Prune everything
docker_prune:
containers: true
images: true
networks: true
volumes: true
builder_cache: true
register: result
# Analyze result
- name: Show results
debug:
var: result
- name: General checks
assert:
that:
- result is changed
# containers
- container.container.Id in result.containers
- "'containers_space_reclaimed' in result"
# images
- "'images_space_reclaimed' in result"
# networks
- network.network.Name in result.networks
# volumes
- volume_anon.stdout in result.volumes
- "'volumes_space_reclaimed' in result"
# builder_cache
- "'builder_cache_space_reclaimed' in result"
- name: API-version specific volumes check (API version before 1.42)
assert:
that:
# For API version 1.41 and before, pruning always considers all volumes
- volume.volume.Name in result.volumes
when: docker_api_version is version('1.42', '<')
- name: API-version specific volumes check (API version 1.42+)
assert:
that:
# For API version 1.41 and before, pruning considers only anonymous volumes,
# so our named container is not removed
- volume.volume.Name not in result.volumes
when: docker_api_version is version('1.42', '>=')
# Prune objects again
- name: Prune everything again (should have no change)
docker_prune:
containers: true
images: true
networks: true
volumes: true
builder_cache: true
register: result
# Analyze result
- name: Show results
debug:
var: result
- name: General checks
assert:
that:
- result is not changed
# containers
- result.containers == []
- result.containers_space_reclaimed == 0
# images
- result.images == []
- result.images_space_reclaimed == 0
# networks
- result.networks == []
# volumes
- result.volumes == []
# builder_cache
- result.builder_cache_space_reclaimed == 0
# Test with filters
- name: Prune with filters
docker_prune:
images: true
images_filters:
dangling: true
register: result
- name: Show results
debug:
var: result
- name: Prune build cache (API version 1.39+)
when: docker_api_version is version('1.39', '>=')
block:
- name: Prune build cache with option
docker_prune:
builder_cache: true
builder_cache_all: true
builder_cache_filters:
until: 10m
builder_cache_keep_storage: 1MB
register: result
- name: Show results
debug:
var: result
- name: Check results
assert:
that:
- "'builder_cache_space_reclaimed' in result"
- "'builder_cache_caches_deleted' in result"
- name: Prune volumes with all filter (API version 1.42+)
when: docker_api_version is version('1.42', '>=')
block:
- name: Prune with filters
# Prune objects
- name: Prune everything
docker_prune:
containers: true
images: true
networks: true
volumes: true
volumes_filters:
all: true
builder_cache: true
register: result
# Analyze result
- name: Show results
debug:
var: result
- name: Check results
- name: General checks
assert:
that:
- result is changed
- volume.volume.Name in result.volumes
# containers
- container.container.Id in result.containers
- "'containers_space_reclaimed' in result"
# images
- "'images_space_reclaimed' in result"
# networks
- network.network.Name in result.networks
# volumes
- volume_anon.stdout in result.volumes
- "'volumes_space_reclaimed' in result"
# builder_cache
- "'builder_cache_space_reclaimed' in result"
- name: API-version specific volumes check (API version before 1.42)
assert:
that:
# For API version 1.41 and before, pruning always considers all volumes
- volume.volume.Name in result.volumes
when: docker_api_version is version('1.42', '<')
- name: API-version specific volumes check (API version 1.42+)
assert:
that:
# For API version 1.41 and before, pruning considers only anonymous volumes,
# so our named container is not removed
- volume.volume.Name not in result.volumes
when: docker_api_version is version('1.42', '>=')
# Prune objects again
- name: Prune everything again (should have no change)
docker_prune:
containers: true
images: true
networks: true
volumes: true
builder_cache: true
register: result
# Analyze result
- name: Show results
debug:
var: result
- name: General checks
assert:
that:
- result is not changed
# containers
- result.containers == []
- result.containers_space_reclaimed == 0
# images
- result.images == []
- result.images_space_reclaimed == 0
# networks
- result.networks == []
# volumes
- result.volumes == []
# builder_cache
- result.builder_cache_space_reclaimed == 0
# Test with filters
- name: Prune with filters
docker_prune:
images: true
images_filters:
dangling: true
register: result
- name: Show results
debug:
var: result
- name: Prune build cache (API version 1.39+)
when: docker_api_version is version('1.39', '>=')
block:
- name: Prune build cache with option
docker_prune:
builder_cache: true
builder_cache_all: true
builder_cache_filters:
until: 10m
builder_cache_keep_storage: 1MB
register: result
- name: Show results
debug:
var: result
- name: Check results
assert:
that:
- "'builder_cache_space_reclaimed' in result"
- "'builder_cache_caches_deleted' in result"
- name: Prune volumes with all filter (API version 1.42+)
when: docker_api_version is version('1.42', '>=')
block:
- name: Prune with filters
docker_prune:
volumes: true
volumes_filters:
all: true
register: result
- name: Show results
debug:
var: result
- name: Check results
assert:
that:
- result is changed
- volume.volume.Name in result.volumes
- "'volumes_space_reclaimed' in result"
when: docker_api_version is version('1.25', '>=')

View File

@ -4,219 +4,219 @@
# SPDX-License-Identifier: GPL-3.0-or-later
- block:
- name: Make sure we're not already using Docker swarm
docker_swarm:
state: absent
force: true
- name: Make sure we're not already using Docker swarm
docker_swarm:
state: absent
force: true
- name: Create a Swarm cluster
docker_swarm:
state: present
advertise_addr: "{{ ansible_default_ipv4.address | default('127.0.0.1') }}"
- name: Create a Swarm cluster
docker_swarm:
state: present
advertise_addr: "{{ ansible_default_ipv4.address | default('127.0.0.1') }}"
- name: Parameter name should be required
docker_secret:
state: present
ignore_errors: true
register: output
- name: Parameter name should be required
docker_secret:
state: present
ignore_errors: true
register: output
- name: assert failure when called with no name
assert:
that:
- 'output.failed'
- 'output.msg == "missing required arguments: name"'
- name: assert failure when called with no name
assert:
that:
- 'output.failed'
- 'output.msg == "missing required arguments: name"'
- name: Test parameters
docker_secret:
name: foo
state: present
ignore_errors: true
register: output
- name: Test parameters
docker_secret:
name: foo
state: present
ignore_errors: true
register: output
- name: assert failure when called with no data
assert:
that:
- 'output.failed'
- 'output.msg == "state is present but any of the following are missing: data, data_src"'
- name: assert failure when called with no data
assert:
that:
- 'output.failed'
- 'output.msg == "state is present but any of the following are missing: data, data_src"'
- name: Create secret
docker_secret:
name: db_password
data: opensesame!
state: present
register: output
- name: Create secret
docker_secret:
name: db_password
data: opensesame!
state: present
register: output
- name: Create variable secret_id
set_fact:
secret_id: "{{ output.secret_id }}"
- name: Create variable secret_id
set_fact:
secret_id: "{{ output.secret_id }}"
- name: Inspect secret
command: "docker secret inspect {{ secret_id }}"
register: inspect
ignore_errors: true
- name: Inspect secret
command: "docker secret inspect {{ secret_id }}"
register: inspect
ignore_errors: true
- debug: var=inspect
- debug: var=inspect
- name: assert secret creation succeeded
assert:
that:
- "'db_password' in inspect.stdout"
- "'ansible_key' in inspect.stdout"
when: inspect is not failed
- assert:
that:
- "'is too new. Maximum supported API version is' in inspect.stderr"
when: inspect is failed
- name: assert secret creation succeeded
assert:
that:
- "'db_password' in inspect.stdout"
- "'ansible_key' in inspect.stdout"
when: inspect is not failed
- assert:
that:
- "'is too new. Maximum supported API version is' in inspect.stderr"
when: inspect is failed
- name: Create secret again
docker_secret:
name: db_password
data: opensesame!
state: present
register: output
- name: Create secret again
docker_secret:
name: db_password
data: opensesame!
state: present
register: output
- name: assert create secret is idempotent
assert:
that:
- not output.changed
- name: assert create secret is idempotent
assert:
that:
- not output.changed
- name: Write secret into file
copy:
dest: "{{ remote_tmp_dir }}/data"
content: |-
opensesame!
- name: Write secret into file
copy:
dest: "{{ remote_tmp_dir }}/data"
content: |-
opensesame!
- name: Create secret again (from file)
docker_secret:
name: db_password
data_src: "{{ remote_tmp_dir }}/data"
state: present
register: output
- name: Create secret again (from file)
docker_secret:
name: db_password
data_src: "{{ remote_tmp_dir }}/data"
state: present
register: output
- name: assert create secret is idempotent
assert:
that:
- not output.changed
- name: assert create secret is idempotent
assert:
that:
- not output.changed
- name: Create secret again (base64)
docker_secret:
name: db_password
data: b3BlbnNlc2FtZSE=
data_is_b64: true
state: present
register: output
- name: Create secret again (base64)
docker_secret:
name: db_password
data: b3BlbnNlc2FtZSE=
data_is_b64: true
state: present
register: output
- name: assert create secret (base64) is idempotent
assert:
that:
- not output.changed
- name: assert create secret (base64) is idempotent
assert:
that:
- not output.changed
- name: Update secret
docker_secret:
name: db_password
data: newpassword!
state: present
register: output
- name: Update secret
docker_secret:
name: db_password
data: newpassword!
state: present
register: output
- name: assert secret was updated
assert:
that:
- output.changed
- output.secret_id != secret_id
- name: assert secret was updated
assert:
that:
- output.changed
- output.secret_id != secret_id
- name: Remove secret
docker_secret:
name: db_password
state: absent
- name: Remove secret
docker_secret:
name: db_password
state: absent
- name: Check that secret is removed
command: "docker secret inspect {{ secret_id }}"
register: output
ignore_errors: true
- name: Check that secret is removed
command: "docker secret inspect {{ secret_id }}"
register: output
ignore_errors: true
- name: assert secret was removed
assert:
that:
- output.failed
- name: assert secret was removed
assert:
that:
- output.failed
# Rolling update
# Rolling update
- name: Create rolling secret
docker_secret:
name: rolling_password
data: opensesame!
rolling_versions: true
state: present
register: original_output
- name: Create rolling secret
docker_secret:
name: rolling_password
data: opensesame!
rolling_versions: true
state: present
register: original_output
- name: Create variable secret_id
set_fact:
secret_id: "{{ original_output.secret_id }}"
- name: Create variable secret_id
set_fact:
secret_id: "{{ original_output.secret_id }}"
- name: Inspect secret
command: "docker secret inspect {{ secret_id }}"
register: inspect
ignore_errors: true
- name: Inspect secret
command: "docker secret inspect {{ secret_id }}"
register: inspect
ignore_errors: true
- debug: var=inspect
- debug: var=inspect
- name: assert secret creation succeeded
assert:
that:
- "'rolling_password' in inspect.stdout"
- "'ansible_key' in inspect.stdout"
- "'ansible_version' in inspect.stdout"
- original_output.secret_name == 'rolling_password_v1'
when: inspect is not failed
- assert:
that:
- "'is too new. Maximum supported API version is' in inspect.stderr"
when: inspect is failed
- name: assert secret creation succeeded
assert:
that:
- "'rolling_password' in inspect.stdout"
- "'ansible_key' in inspect.stdout"
- "'ansible_version' in inspect.stdout"
- original_output.secret_name == 'rolling_password_v1'
when: inspect is not failed
- assert:
that:
- "'is too new. Maximum supported API version is' in inspect.stderr"
when: inspect is failed
- name: Create secret again
docker_secret:
name: rolling_password
data: newpassword!
rolling_versions: true
state: present
register: new_output
- name: Create secret again
docker_secret:
name: rolling_password
data: newpassword!
rolling_versions: true
state: present
register: new_output
- name: assert that new version is created
assert:
that:
- new_output.changed
- new_output.secret_id != original_output.secret_id
- new_output.secret_name != original_output.secret_name
- new_output.secret_name == 'rolling_password_v2'
- name: assert that new version is created
assert:
that:
- new_output.changed
- new_output.secret_id != original_output.secret_id
- new_output.secret_name != original_output.secret_name
- new_output.secret_name == 'rolling_password_v2'
- name: Remove rolling secrets
docker_secret:
name: rolling_password
rolling_versions: true
state: absent
- name: Remove rolling secrets
docker_secret:
name: rolling_password
rolling_versions: true
state: absent
- name: Check that secret is removed
command: "docker secret inspect {{ original_output.secret_id }}"
register: output
ignore_errors: true
- name: Check that secret is removed
command: "docker secret inspect {{ original_output.secret_id }}"
register: output
ignore_errors: true
- name: assert secret was removed
assert:
that:
- output.failed
- name: assert secret was removed
assert:
that:
- output.failed
- name: Check that secret is removed
command: "docker secret inspect {{ new_output.secret_id }}"
register: output
ignore_errors: true
- name: Check that secret is removed
command: "docker secret inspect {{ new_output.secret_id }}"
register: output
ignore_errors: true
- name: assert secret was removed
assert:
that:
- output.failed
- name: assert secret was removed
assert:
that:
- output.failed
always:
- name: Remove Swarm cluster
docker_swarm:
state: absent
force: true
- name: Remove Swarm cluster
docker_swarm:
state: absent
force: true

View File

@ -4,114 +4,114 @@
# SPDX-License-Identifier: GPL-3.0-or-later
- block:
- name: Make sure we're not already using Docker swarm
docker_swarm:
state: absent
force: true
- name: Make sure we're not already using Docker swarm
docker_swarm:
state: absent
force: true
- name: Create a Swarm cluster
docker_swarm:
state: present
advertise_addr: "{{ ansible_default_ipv4.address | default('127.0.0.1') }}"
- name: Create a Swarm cluster
docker_swarm:
state: present
advertise_addr: "{{ ansible_default_ipv4.address | default('127.0.0.1') }}"
- name: install docker_stack python requirements
pip:
name: jsondiff,pyyaml
- name: install docker_stack python requirements
pip:
name: jsondiff,pyyaml
- name: Create a stack without name
register: output
docker_stack:
state: present
ignore_errors: true
- name: Create a stack without name
register: output
docker_stack:
state: present
ignore_errors: true
- name: assert failure when name not set
assert:
that:
- output is failed
- 'output.msg == "missing required arguments: name"'
- name: assert failure when name not set
assert:
that:
- output is failed
- 'output.msg == "missing required arguments: name"'
- name: Create a stack without compose
register: output
docker_stack:
name: test_stack
ignore_errors: true
- name: Create a stack without compose
register: output
docker_stack:
name: test_stack
ignore_errors: true
- name: assert failure when compose not set
assert:
that:
- output is failed
- 'output.msg == "compose parameter must be a list containing at least one element"'
- name: assert failure when compose not set
assert:
that:
- output is failed
- 'output.msg == "compose parameter must be a list containing at least one element"'
- name: Ensure stack is absent
register: output
docker_stack:
state: absent
name: test_stack
absent_retries: 30
- name: Ensure stack is absent
register: output
docker_stack:
state: absent
name: test_stack
absent_retries: 30
- name: Template compose files
template:
src: "{{item}}"
dest: "{{remote_tmp_dir}}/"
with_items:
- stack_compose_base.yml
- stack_compose_overrides.yml
- name: Template compose files
template:
src: "{{item}}"
dest: "{{remote_tmp_dir}}/"
with_items:
- stack_compose_base.yml
- stack_compose_overrides.yml
- name: Create stack with compose file
register: output
docker_stack:
state: present
name: test_stack
compose:
- "{{remote_tmp_dir}}/stack_compose_base.yml"
- name: Create stack with compose file
register: output
docker_stack:
state: present
name: test_stack
compose:
- "{{remote_tmp_dir}}/stack_compose_base.yml"
- name: assert test_stack changed on stack creation with compose file
assert:
that:
- output is changed
- name: assert test_stack changed on stack creation with compose file
assert:
that:
- output is changed
# FIXME: updating the stack prevents leaving the swarm on Shippable
#- name: Update stack with YAML
# register: output
# docker_stack:
# state: present
# name: test_stack
# compose:
# - "{{stack_compose_base}}"
# - "{{stack_compose_overrides}}"
#
#- name: assert test_stack correctly changed on update with yaml
# assert:
# that:
# - output is changed
# - output.stack_spec_diff == stack_update_expected_diff
# FIXME: updating the stack prevents leaving the swarm on Shippable
# - name: Update stack with YAML
# register: output
# docker_stack:
# state: present
# name: test_stack
# compose:
# - "{{stack_compose_base}}"
# - "{{stack_compose_overrides}}"
#
# - name: assert test_stack correctly changed on update with yaml
# assert:
# that:
# - output is changed
# - output.stack_spec_diff == stack_update_expected_diff
- name: Delete stack
register: output
docker_stack:
state: absent
name: test_stack
absent_retries: 30
- name: Delete stack
register: output
docker_stack:
state: absent
name: test_stack
absent_retries: 30
- name: assert delete of existing stack returns changed
assert:
that:
- output is changed
- name: assert delete of existing stack returns changed
assert:
that:
- output is changed
- name: Delete stack again
register: output
docker_stack:
state: absent
name: test_stack
absent_retries: 30
- name: Delete stack again
register: output
docker_stack:
state: absent
name: test_stack
absent_retries: 30
- name: assert state=absent idempotency
assert:
that:
- output is not changed
- name: assert state=absent idempotency
assert:
that:
- output is not changed
always:
- name: Remove a Swarm cluster
docker_swarm:
state: absent
force: true
- name: Remove a Swarm cluster
docker_swarm:
state: absent
force: true

View File

@ -5,6 +5,6 @@
version: '3'
services:
busybox:
image: "{{ docker_test_image_busybox }}"
command: sleep 3600
busybox:
image: "{{ docker_test_image_busybox }}"
command: sleep 3600

View File

@ -5,6 +5,6 @@
version: '3'
services:
busybox:
environment:
envvar: value
busybox:
environment:
envvar: value

View File

@ -4,17 +4,17 @@
# SPDX-License-Identifier: GPL-3.0-or-later
stack_compose_base:
version: '3'
services:
busybox:
image: "{{ docker_test_image_busybox }}"
command: sleep 3600
version: '3'
services:
busybox:
image: "{{ docker_test_image_busybox }}"
command: sleep 3600
stack_compose_overrides:
version: '3'
services:
busybox:
environment:
envvar: value
version: '3'
services:
busybox:
environment:
envvar: value
stack_update_expected_diff: '{"test_stack_busybox": {"TaskTemplate": {"ContainerSpec": {"Env": ["envvar=value"]}}}}'

View File

@ -4,75 +4,75 @@
# SPDX-License-Identifier: GPL-3.0-or-later
- block:
- name: Make sure we're not already using Docker swarm
docker_swarm:
state: absent
force: true
- name: Make sure we're not already using Docker swarm
docker_swarm:
state: absent
force: true
- name: Get docker_stack_info when docker is not running in swarm mode
docker_stack_info:
ignore_errors: true
register: output
- name: Get docker_stack_info when docker is not running in swarm mode
docker_stack_info:
ignore_errors: true
register: output
- name: Assert failure when called when swarm is not running
assert:
that:
- 'output is failed'
- '"Error response from daemon: This node is not a swarm manager" in output.msg'
- name: Assert failure when called when swarm is not running
assert:
that:
- 'output is failed'
- '"Error response from daemon: This node is not a swarm manager" in output.msg'
- name: Create a swarm cluster
docker_swarm:
state: present
advertise_addr: "{{ ansible_default_ipv4.address | default('127.0.0.1') }}"
- name: Create a swarm cluster
docker_swarm:
state: present
advertise_addr: "{{ ansible_default_ipv4.address | default('127.0.0.1') }}"
- name: Get docker_stack_info when docker is running and not stack available
docker_stack_info:
register: output
- name: Get docker_stack_info when docker is running and not stack available
docker_stack_info:
register: output
- name: Assert stack facts
assert:
that:
- 'output.results | type_debug == "list"'
- 'output.results | length == 0'
- name: Assert stack facts
assert:
that:
- 'output.results | type_debug == "list"'
- 'output.results | length == 0'
- name: Template compose files
template:
src: "{{ item }}"
dest: "{{ remote_tmp_dir }}/"
with_items:
- stack_compose_base.yml
- stack_compose_overrides.yml
- name: Template compose files
template:
src: "{{ item }}"
dest: "{{ remote_tmp_dir }}/"
with_items:
- stack_compose_base.yml
- stack_compose_overrides.yml
- name: Install docker_stack python requirements
pip:
name: jsondiff,pyyaml
- name: Install docker_stack python requirements
pip:
name: jsondiff,pyyaml
- name: Create stack with compose file
register: output
docker_stack:
state: present
name: test_stack
compose:
- "{{ remote_tmp_dir }}/stack_compose_base.yml"
- name: Create stack with compose file
register: output
docker_stack:
state: present
name: test_stack
compose:
- "{{ remote_tmp_dir }}/stack_compose_base.yml"
- name: Assert test_stack changed on stack creation with compose file
assert:
that:
- output is changed
- name: Assert test_stack changed on stack creation with compose file
assert:
that:
- output is changed
- name: Get docker_stack_info when docker is running
docker_stack_info:
register: output
- name: Get docker_stack_info when docker is running
docker_stack_info:
register: output
- name: assert stack facts
assert:
that:
- 'output.results | type_debug == "list"'
- 'output.results[0].Name == "test_stack"'
- 'output.results[0].Services == "1"'
- name: assert stack facts
assert:
that:
- 'output.results | type_debug == "list"'
- 'output.results[0].Name == "test_stack"'
- 'output.results[0].Services == "1"'
always:
- name: Cleanup
docker_swarm:
state: absent
force: true
- name: Cleanup
docker_swarm:
state: absent
force: true

View File

@ -5,6 +5,6 @@
version: '3'
services:
busybox:
image: "{{ docker_test_image_busybox }}"
command: sleep 3600
busybox:
image: "{{ docker_test_image_busybox }}"
command: sleep 3600

View File

@ -5,6 +5,6 @@
version: '3'
services:
busybox:
environment:
envvar: value
busybox:
environment:
envvar: value

View File

@ -4,17 +4,17 @@
# SPDX-License-Identifier: GPL-3.0-or-later
stack_compose_base:
version: '3'
services:
busybox:
image: "{{ docker_test_image_busybox }}"
command: sleep 3600
version: '3'
services:
busybox:
image: "{{ docker_test_image_busybox }}"
command: sleep 3600
stack_compose_overrides:
version: '3'
services:
busybox:
environment:
envvar: value
version: '3'
services:
busybox:
environment:
envvar: value
stack_update_expected_diff: '{"test_stack_busybox": {"TaskTemplate": {"ContainerSpec": {"Env": ["envvar=value"]}}}}'

View File

@ -4,82 +4,82 @@
# SPDX-License-Identifier: GPL-3.0-or-later
- block:
- name: Make sure we're not already using Docker swarm
docker_swarm:
state: absent
force: true
- name: Make sure we're not already using Docker swarm
docker_swarm:
state: absent
force: true
- name: Get docker_stack_info when docker is not running in swarm mode
docker_stack_info:
ignore_errors: true
register: output
- name: Get docker_stack_info when docker is not running in swarm mode
docker_stack_info:
ignore_errors: true
register: output
- name: Assert failure when called when swarm is not running
assert:
that:
- 'output is failed'
- '"Error response from daemon: This node is not a swarm manager" in output.msg'
- name: Assert failure when called when swarm is not running
assert:
that:
- 'output is failed'
- '"Error response from daemon: This node is not a swarm manager" in output.msg'
- name: Create a swarm cluster
docker_swarm:
state: present
advertise_addr: "{{ ansible_default_ipv4.address | default('127.0.0.1') }}"
- name: Create a swarm cluster
docker_swarm:
state: present
advertise_addr: "{{ ansible_default_ipv4.address | default('127.0.0.1') }}"
- name: Get docker_stack_info when docker is running and not stack available
docker_stack_info:
register: output
- name: Get docker_stack_info when docker is running and not stack available
docker_stack_info:
register: output
- name: Assert stack facts
assert:
that:
- 'output.results | type_debug == "list"'
- 'output.results | length == 0'
- name: Assert stack facts
assert:
that:
- 'output.results | type_debug == "list"'
- 'output.results | length == 0'
- name: Template compose files
template:
src: "{{ item }}"
dest: "{{ remote_tmp_dir }}/"
with_items:
- stack_compose_base.yml
- stack_compose_overrides.yml
- name: Template compose files
template:
src: "{{ item }}"
dest: "{{ remote_tmp_dir }}/"
with_items:
- stack_compose_base.yml
- stack_compose_overrides.yml
- name: Install docker_stack python requirements
pip:
name: jsondiff,pyyaml
- name: Install docker_stack python requirements
pip:
name: jsondiff,pyyaml
- name: Create stack with compose file
register: output
docker_stack:
state: present
name: test_stack
compose:
- "{{ remote_tmp_dir }}/stack_compose_base.yml"
- name: Create stack with compose file
register: output
docker_stack:
state: present
name: test_stack
compose:
- "{{ remote_tmp_dir }}/stack_compose_base.yml"
- name: Assert test_stack changed on stack creation with compose file
assert:
that:
- output is changed
- name: Assert test_stack changed on stack creation with compose file
assert:
that:
- output is changed
- name: Wait a bit to make sure stack is running
pause:
seconds: 5
- name: Wait a bit to make sure stack is running
pause:
seconds: 5
- name: Get docker_stack_info when docker is running
docker_stack_info:
register: output
- name: Get docker_stack_info when docker is running
docker_stack_info:
register: output
- name: Get docker_stack_task_info first element
docker_stack_task_info:
name: "{{ output.results[0].Name }}"
register: output
- name: Get docker_stack_task_info first element
docker_stack_task_info:
name: "{{ output.results[0].Name }}"
register: output
- name: assert stack facts
assert:
that:
- 'output.results | type_debug == "list"'
- 'output.results[0].DesiredState == "Running"'
- 'output.results[0].Image == docker_test_image_busybox'
- 'output.results[0].Name == "test_stack_busybox.1"'
- name: assert stack facts
assert:
that:
- 'output.results | type_debug == "list"'
- 'output.results[0].DesiredState == "Running"'
- 'output.results[0].Image == docker_test_image_busybox'
- 'output.results[0].Name == "test_stack_busybox.1"'
always:
- name: Cleanup

View File

@ -5,6 +5,6 @@
version: '3'
services:
busybox:
image: "{{ docker_test_image_busybox }}"
command: sleep 3600
busybox:
image: "{{ docker_test_image_busybox }}"
command: sleep 3600

View File

@ -5,6 +5,6 @@
version: '3'
services:
busybox:
environment:
envvar: value
busybox:
environment:
envvar: value

View File

@ -4,17 +4,17 @@
# SPDX-License-Identifier: GPL-3.0-or-later
stack_compose_base:
version: '3'
services:
busybox:
image: "{{ docker_test_image_busybox }}"
command: sleep 3600
version: '3'
services:
busybox:
image: "{{ docker_test_image_busybox }}"
command: sleep 3600
stack_compose_overrides:
version: '3'
services:
busybox:
environment:
envvar: value
version: '3'
services:
busybox:
environment:
envvar: value
stack_update_expected_diff: '{"test_stack_busybox": {"TaskTemplate": {"ContainerSpec": {"Env": ["envvar=value"]}}}}'

Some files were not shown because too many files have changed in this diff Show More