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 # 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) # 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 # SPDX-License-Identifier: GPL-3.0-or-later
@ -49,11 +50,11 @@ jobs:
parameters: parameters:
jobs: jobs:
- ${{ if eq(length(parameters.groups), 0) }}: - ${{ 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 }}: - ${{ each target in parameters.targets }}:
- name: ${{ format(format(parameters.nameGroupFormat, parameters.nameFormat), coalesce(target.name, target.test), group) }} - name: ${{ format(parameters.nameFormat, coalesce(target.name, target.test)) }}
test: ${{ format(format(parameters.testGroupFormat, parameters.testFormat), coalesce(target.test, target.name), group) }} 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 # 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) # 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 # SPDX-License-Identifier: GPL-3.0-or-later
@ -13,37 +14,37 @@ parameters:
jobs: jobs:
- ${{ each job in parameters.jobs }}: - ${{ each job in parameters.jobs }}:
- job: test_${{ replace(replace(replace(job.test, '/', '_'), '.', '_'), '-', '_') }} - job: test_${{ replace(replace(replace(job.test, '/', '_'), '.', '_'), '-', '_') }}
displayName: ${{ job.name }} displayName: ${{ job.name }}
container: default container: default
workspace: workspace:
clean: all clean: all
steps: steps:
- checkout: self - checkout: self
fetchDepth: $(fetchDepth) fetchDepth: $(fetchDepth)
path: $(checkoutPath) path: $(checkoutPath)
- bash: .azure-pipelines/scripts/run-tests.sh "$(entryPoint)" "${{ job.test }}" "$(coverageBranches)" - bash: .azure-pipelines/scripts/run-tests.sh "$(entryPoint)" "${{ job.test }}" "$(coverageBranches)"
displayName: Run Tests displayName: Run Tests
- bash: .azure-pipelines/scripts/process-results.sh - bash: .azure-pipelines/scripts/process-results.sh
condition: succeededOrFailed() condition: succeededOrFailed()
displayName: Process Results displayName: Process Results
- bash: .azure-pipelines/scripts/aggregate-coverage.sh "$(Agent.TempDirectory)" - bash: .azure-pipelines/scripts/aggregate-coverage.sh "$(Agent.TempDirectory)"
condition: eq(variables.haveCoverageData, 'true') condition: eq(variables.haveCoverageData, 'true')
displayName: Aggregate Coverage Data displayName: Aggregate Coverage Data
- task: PublishTestResults@2 - task: PublishTestResults@2
condition: eq(variables.haveTestResults, 'true') condition: eq(variables.haveTestResults, 'true')
inputs: inputs:
testResultsFiles: "$(outputPath)/junit/*.xml" testResultsFiles: "$(outputPath)/junit/*.xml"
displayName: Publish Test Results displayName: Publish Test Results
- task: PublishPipelineArtifact@1 - task: PublishPipelineArtifact@1
condition: eq(variables.haveBotResults, 'true') condition: eq(variables.haveBotResults, 'true')
displayName: Publish Bot Results displayName: Publish Bot Results
inputs: inputs:
targetPath: "$(outputPath)/bot/" targetPath: "$(outputPath)/bot/"
artifactName: "Bot $(System.JobAttempt) $(System.StageDisplayName) $(System.JobDisplayName)" artifactName: "Bot $(System.JobAttempt) $(System.StageDisplayName) $(System.JobDisplayName)"
- task: PublishPipelineArtifact@1 - task: PublishPipelineArtifact@1
condition: eq(variables.haveCoverageData, 'true') condition: eq(variables.haveCoverageData, 'true')
displayName: Publish Coverage Data displayName: Publish Coverage Data
inputs: inputs:
targetPath: "$(Agent.TempDirectory)/coverage/" targetPath: "$(Agent.TempDirectory)/coverage/"
artifactName: "Coverage $(System.JobAttempt) $(System.StageDisplayName) $(System.JobDisplayName)" artifactName: "Coverage $(System.JobAttempt) $(System.StageDisplayName) $(System.JobDisplayName)"

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -4,313 +4,131 @@
# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-License-Identifier: GPL-3.0-or-later
- block: - 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 - name: Make sure we're not already using Docker swarm
docker_swarm: docker_swarm:
state: absent state: absent
force: true 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 - name: Create a Swarm cluster
docker_swarm: docker_swarm:
name: default 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!
state: present 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: 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 state: present
ignore_errors: true ignore_errors: true
register: output register: output
- name: Assert failure when called with invalid template_driver - name: Assert failure when called with no name
assert: assert:
that: that:
- 'output is failed' - 'output is failed'
- 'output.msg == "value of template_driver must be one of: golang, got: not a template driver"' - '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 - name: Create config again
docker_config: docker_config:
name: db_password name: db_password
data: opensesame! data: opensesame!
template_driver: golang
state: present state: present
register: output register: output
- name: Assert create config is idempotent - name: Assert create config is idempotent
assert: assert:
that: that:
- output is not changed - output is not changed
# data is the docker swarm's name - name: Write config into file
- name: Update config with template data copy:
dest: "{{ remote_tmp_dir }}/data"
content: |-
opensesame!
- name: Create config again (from file)
docker_config: docker_config:
name: db_password name: db_password
data: "{{ '{{' }} .Service.Name {{ '}}' }}" data_src: "{{ remote_tmp_dir }}/data"
template_driver: golang
state: present state: present
register: output register: output
- name: Inspect config - name: Assert create config is idempotent
command: "docker config inspect {{ output.config_id }}"
register: inspect
- name: Show inspection result
debug:
var: inspect
- name: Assert config creation succeeded
assert: assert:
that: that:
- "'db_password' in inspect.stdout" - output is not changed
- "'ansible_key' in inspect.stdout"
# According to the API docs, 'Data' is "Base64-url-safe-encoded (RFC 4648) config data." - name: Create config again (base64)
- "'\"Data\": \"e3sgLlNlcnZpY2UuTmFtZSB9fQ==\"' in inspect.stdout" docker_config:
- "'Templating' in inspect.stdout" name: db_password
- "'\"Name\": \"golang\"' in inspect.stdout" 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 - name: Remove config
docker_config: docker_config:
@ -318,7 +136,7 @@
state: absent state: absent
- name: Check that config is removed - name: Check that config is removed
command: "docker config inspect {{ output.config_id }}" command: "docker config inspect {{ config_id }}"
register: output register: output
ignore_errors: true ignore_errors: true
@ -327,8 +145,190 @@
that: that:
- output is failed - 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: always:
- name: Remove a Swarm cluster - name: Remove a Swarm cluster
docker_swarm: docker_swarm:
state: absent state: absent
force: true force: true

View File

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

View File

@ -60,10 +60,10 @@
- assert: - assert:
that: that:
- start_1 is changed - start_1 is changed
- start_2 is changed - start_2 is changed
- start_3 is not changed - start_3 is not changed
- start_4 is not changed - start_4 is not changed
#################################################################### ####################################################################
## container_default_behavior: no_defaults ######################### ## container_default_behavior: no_defaults #########################
@ -116,7 +116,7 @@
- assert: - assert:
that: that:
- start_1 is changed - start_1 is changed
- start_2 is changed - start_2 is changed
- start_3 is not changed - start_3 is not changed
- start_4 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 - name: Get image ID of {{ docker_test_image_hello_world }} and {{ docker_test_image_alpine }} images
docker_image_info: docker_image_info:
name: name:
- "{{ docker_test_image_hello_world }}" - "{{ docker_test_image_hello_world }}"
- "{{ docker_test_image_alpine }}" - "{{ docker_test_image_alpine }}"
register: image_info register: image_info
- assert: - assert:

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -131,91 +131,91 @@
- name: Check general things - name: Check general things
assert: assert:
that: that:
- create is changed - create is changed
- update is changed - update is changed
- update2 is changed - update2 is changed
- recreate is changed - recreate is changed
# Make sure the container was *not* recreated when it should not be # Make sure the container was *not* recreated when it should not be
- create.container.Id == update.container.Id - create.container.Id == update.container.Id
- create.container.Id == update2.container.Id - create.container.Id == update2.container.Id
# Make sure that the container was recreated when it should be # Make sure that the container was recreated when it should be
- create.container.Id != recreate.container.Id - create.container.Id != recreate.container.Id
- name: Check diff for first update - name: Check diff for first update
assert: assert:
that: that:
# blkio_weight sometimes cannot be set, then we end up with 0 instead of the value we had # 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.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 - not has_blkio_weight or update.diff.after.blkio_weight == 234
- update.diff.before.cpu_period == 90000 - update.diff.before.cpu_period == 90000
- update.diff.after.cpu_period == 50000 - update.diff.after.cpu_period == 50000
- update.diff.before.cpu_quota == 150000 - update.diff.before.cpu_quota == 150000
- update.diff.after.cpu_quota == 50000 - update.diff.after.cpu_quota == 50000
- update.diff.before.cpu_shares == 900 - update.diff.before.cpu_shares == 900
- update.diff.after.cpu_shares == 1100 - update.diff.after.cpu_shares == 1100
- update.diff.before.memory == 67108864 - update.diff.before.memory == 67108864
- update.diff.after.memory == 50331648 - update.diff.after.memory == 50331648
- update.diff.before.memory_reservation == 67108864 - update.diff.before.memory_reservation == 67108864
- update.diff.after.memory_reservation == 50331648 - 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.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([]))) (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" - "'restart_policy' not in update.diff.before"
- update.diff.before.restart_retries == 5 - update.diff.before.restart_retries == 5
- update.diff.after.restart_retries == 2 - update.diff.after.restart_retries == 2
- name: Check diff for second update - name: Check diff for second update
assert: assert:
that: 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.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 - not has_blkio_weight or update2.diff.after.blkio_weight == 135
- update2.diff.before.cpu_period == 50000 - update2.diff.before.cpu_period == 50000
- update2.diff.after.cpu_period == 30000 - update2.diff.after.cpu_period == 30000
- update2.diff.before.cpu_quota == 50000 - update2.diff.before.cpu_quota == 50000
- update2.diff.after.cpu_quota == 40000 - update2.diff.after.cpu_quota == 40000
- update2.diff.before.cpu_shares == 1100 - update2.diff.before.cpu_shares == 1100
- update2.diff.after.cpu_shares == 1000 - update2.diff.after.cpu_shares == 1000
- update2.diff.before.memory == 50331648 - update2.diff.before.memory == 50331648
- update2.diff.after.memory == 33554432 - update2.diff.after.memory == 33554432
- update2.diff.before.memory_reservation == 50331648 - update2.diff.before.memory_reservation == 50331648
- update2.diff.after.memory_reservation == 31457280 - 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.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.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.before.restart_policy == 'on-failure'
- update2.diff.after.restart_policy == 'always' - update2.diff.after.restart_policy == 'always'
- update2.diff.before.restart_retries == 2 - update2.diff.before.restart_retries == 2
- update2.diff.after.restart_retries == 0 - update2.diff.after.restart_retries == 0
- name: Check diff for recreation - name: Check diff for recreation
assert: assert:
that: 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.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 - not has_blkio_weight or recreate.diff.after.blkio_weight == 234
- recreate.diff.before.cpu_period == 30000 - recreate.diff.before.cpu_period == 30000
- recreate.diff.after.cpu_period == 50000 - recreate.diff.after.cpu_period == 50000
- recreate.diff.before.cpu_quota == 40000 - recreate.diff.before.cpu_quota == 40000
- recreate.diff.after.cpu_quota == 50000 - recreate.diff.after.cpu_quota == 50000
- recreate.diff.before.cpu_shares == 1000 - recreate.diff.before.cpu_shares == 1000
- recreate.diff.after.cpu_shares == 1100 - recreate.diff.after.cpu_shares == 1100
- recreate.diff.before.memory == 33554432 - recreate.diff.before.memory == 33554432
- recreate.diff.after.memory == 50331648 - recreate.diff.after.memory == 50331648
- recreate.diff.before.memory_reservation == 31457280 - recreate.diff.before.memory_reservation == 31457280
- recreate.diff.after.memory_reservation == 50331648 - 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.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.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.before.restart_policy == 'always'
- recreate.diff.after.restart_policy == 'on-failure' - recreate.diff.after.restart_policy == 'on-failure'
- recreate.diff.before.restart_retries == 0 - recreate.diff.before.restart_retries == 0
- recreate.diff.after.restart_retries == 2 - recreate.diff.after.restart_retries == 2
- recreate.diff.before.command == ['/bin/sh', '-c', 'sleep 10m'] - recreate.diff.before.command == ['/bin/sh', '-c', 'sleep 10m']
- recreate.diff.after.command == ['/bin/sh', '-c', 'sleep 20m'] - recreate.diff.after.command == ['/bin/sh', '-c', 'sleep 20m']

View File

@ -9,218 +9,218 @@
#################################################################### ####################################################################
- block: - block:
- name: Create random container name - name: Create random container name
set_fact: set_fact:
cname: "{{ 'ansible-docker-test-%0x' % ((2**32) | random) }}" cname: "{{ 'ansible-docker-test-%0x' % ((2**32) | random) }}"
- name: Make sure container is not there - name: Make sure container is not there
docker_container: docker_container:
name: "{{ cname }}" name: "{{ cname }}"
state: absent state: absent
force_kill: true force_kill: true
- name: Execute in a non-present container - name: Execute in a non-present container
docker_container_exec: docker_container_exec:
container: "{{ cname }}" container: "{{ cname }}"
command: "/bin/bash -c 'ls -a'" command: "/bin/bash -c 'ls -a'"
register: result register: result
ignore_errors: true ignore_errors: true
- assert: - assert:
that: that:
- result is failed - result is failed
- "'Could not find container' in result.msg" - "'Could not find container' in result.msg"
- name: Make sure container exists - name: Make sure container exists
docker_container: docker_container:
name: "{{ cname }}" name: "{{ cname }}"
image: "{{ docker_test_image_alpine }}" image: "{{ docker_test_image_alpine }}"
command: '/bin/sh -c "sleep 10m"' command: '/bin/sh -c "sleep 10m"'
state: started state: started
force_kill: true force_kill: true
- name: Execute in a present container (command) - name: Execute in a present container (command)
docker_container_exec: docker_container_exec:
container: "{{ cname }}" container: "{{ cname }}"
command: "/bin/sh -c 'ls -a'" command: "/bin/sh -c 'ls -a'"
register: result_cmd register: result_cmd
- assert: - assert:
that: that:
- result_cmd.rc == 0 - result_cmd.rc == 0
- "'stdout' in result_cmd" - "'stdout' in result_cmd"
- "'stdout_lines' in result_cmd" - "'stdout_lines' in result_cmd"
- "'stderr' in result_cmd" - "'stderr' in result_cmd"
- "'stderr_lines' in result_cmd" - "'stderr_lines' in result_cmd"
- name: Execute in a present container (argv) - name: Execute in a present container (argv)
docker_container_exec: docker_container_exec:
container: "{{ cname }}" container: "{{ cname }}"
argv: argv:
- /bin/sh - /bin/sh
- '-c' - '-c'
- ls -a - ls -a
register: result_argv register: result_argv
- assert: - assert:
that: that:
- result_argv.rc == 0 - result_argv.rc == 0
- "'stdout' in result_argv" - "'stdout' in result_argv"
- "'stdout_lines' in result_argv" - "'stdout_lines' in result_argv"
- "'stderr' in result_argv" - "'stderr' in result_argv"
- "'stderr_lines' in result_argv" - "'stderr_lines' in result_argv"
- result_cmd.stdout == result_argv.stdout - result_cmd.stdout == result_argv.stdout
- name: Execute in a present container (cat without stdin) - name: Execute in a present container (cat without stdin)
docker_container_exec: docker_container_exec:
container: "{{ cname }}" container: "{{ cname }}"
argv: argv:
- /bin/sh - /bin/sh
- '-c' - '-c'
- cat - cat
register: result register: result
- assert: - assert:
that: that:
- result.rc == 0 - result.rc == 0
- result.stdout == '' - result.stdout == ''
- result.stdout_lines == [] - result.stdout_lines == []
- result.stderr == '' - result.stderr == ''
- result.stderr_lines == [] - result.stderr_lines == []
- name: Execute in a present container (cat with stdin) - name: Execute in a present container (cat with stdin)
docker_container_exec: docker_container_exec:
container: "{{ cname }}" container: "{{ cname }}"
argv: argv:
- /bin/sh - /bin/sh
- '-c' - '-c'
- cat - cat
stdin: Hello world! stdin: Hello world!
strip_empty_ends: false strip_empty_ends: false
register: result register: result
- assert: - assert:
that: that:
- result.rc == 0 - result.rc == 0
- result.stdout == 'Hello world!\n' - result.stdout == 'Hello world!\n'
- result.stdout_lines == ['Hello world!'] - result.stdout_lines == ['Hello world!']
- result.stderr == '' - result.stderr == ''
- result.stderr_lines == [] - result.stderr_lines == []
- name: Execute in a present container (cat with stdin, no newline) - name: Execute in a present container (cat with stdin, no newline)
docker_container_exec: docker_container_exec:
container: "{{ cname }}" container: "{{ cname }}"
argv: argv:
- /bin/sh - /bin/sh
- '-c' - '-c'
- cat - cat
stdin: Hello world! stdin: Hello world!
stdin_add_newline: false stdin_add_newline: false
strip_empty_ends: false strip_empty_ends: false
register: result register: result
- assert: - assert:
that: that:
- result.rc == 0 - result.rc == 0
- result.stdout == 'Hello world!' - result.stdout == 'Hello world!'
- result.stdout_lines == ['Hello world!'] - result.stdout_lines == ['Hello world!']
- result.stderr == '' - result.stderr == ''
- result.stderr_lines == [] - result.stderr_lines == []
- name: Execute in a present container (cat with stdin, newline but stripping) - name: Execute in a present container (cat with stdin, newline but stripping)
docker_container_exec: docker_container_exec:
container: "{{ cname }}" container: "{{ cname }}"
argv: argv:
- /bin/sh - /bin/sh
- '-c' - '-c'
- cat - cat
stdin: Hello world! stdin: Hello world!
stdin_add_newline: true stdin_add_newline: true
strip_empty_ends: true strip_empty_ends: true
register: result register: result
- assert: - assert:
that: that:
- result.rc == 0 - result.rc == 0
- result.stdout == 'Hello world!' - result.stdout == 'Hello world!'
- result.stdout_lines == ['Hello world!'] - result.stdout_lines == ['Hello world!']
- result.stderr == '' - result.stderr == ''
- result.stderr_lines == [] - result.stderr_lines == []
- name: Prepare long string - name: Prepare long string
set_fact: set_fact:
very_long_string: "{{ 'something long ' * 10000 }}" very_long_string: "{{ 'something long ' * 10000 }}"
very_long_string2: "{{ 'something else ' * 5000 }}" very_long_string2: "{{ 'something else ' * 5000 }}"
- name: Execute in a present container (long stdin) - name: Execute in a present container (long stdin)
docker_container_exec: docker_container_exec:
container: "{{ cname }}" container: "{{ cname }}"
argv: argv:
- /bin/sh - /bin/sh
- '-c' - '-c'
- cat - cat
stdin: |- stdin: |-
{{ very_long_string }} {{ very_long_string }}
{{ very_long_string2 }} {{ very_long_string2 }}
register: result register: result
- assert: - assert:
that: that:
- result is changed - result is changed
- result.rc == 0 - result.rc == 0
- result.stdout == (very_long_string ~ '\n' ~ very_long_string2) - result.stdout == (very_long_string ~ '\n' ~ very_long_string2)
- result.stdout_lines == [very_long_string, very_long_string2] - result.stdout_lines == [very_long_string, very_long_string2]
- result.stderr == '' - result.stderr == ''
- result.stderr_lines == [] - result.stderr_lines == []
- "'exec_id' not in result" - "'exec_id' not in result"
- name: Execute in a present container (detached) - name: Execute in a present container (detached)
docker_container_exec: docker_container_exec:
container: "{{ cname }}" container: "{{ cname }}"
argv: argv:
- /bin/sh - /bin/sh
- '-c' - '-c'
- sleep 1m - sleep 1m
detach: true detach: true
register: result register: result
- debug: var=result - debug: var=result
- assert: - assert:
that: that:
- result is changed - result is changed
- "'rc' not in result" - "'rc' not in result"
- "'stdout' not in result" - "'stdout' not in result"
- "'stderr' not in result" - "'stderr' not in result"
- result.exec_id is string - result.exec_id is string
- name: Execute in a present container (environment variable) - name: Execute in a present container (environment variable)
docker_container_exec: docker_container_exec:
container: "{{ cname }}" container: "{{ cname }}"
argv: argv:
- /bin/sh - /bin/sh
- '-c' - '-c'
- 'echo "$FOO" ; echo $FOO > /dev/stderr' - 'echo "$FOO" ; echo $FOO > /dev/stderr'
env: env:
FOO: |- FOO: |-
bar bar
baz baz
register: result register: result
- assert: - assert:
that: that:
- result.rc == 0 - result.rc == 0
- result.stdout == 'bar\nbaz' - result.stdout == 'bar\nbaz'
- result.stdout_lines == ['bar', 'baz'] - result.stdout_lines == ['bar', 'baz']
- result.stderr == 'bar baz' - result.stderr == 'bar baz'
- result.stderr_lines == ['bar baz'] - result.stderr_lines == ['bar baz']
always: always:
- name: Cleanup - name: Cleanup
docker_container: docker_container:
name: "{{ cname }}" name: "{{ cname }}"
state: absent state: absent
force_kill: true force_kill: true
when: docker_api_version is version('1.25', '>=') when: docker_api_version is version('1.25', '>=')

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -43,18 +43,18 @@
- assert: - assert:
that: that:
- fail_1 is failed - fail_1 is failed
- >- - >-
'Cannot find image registry.example.com:5000/foo/bar:baz' == fail_1.msg 'Cannot find image registry.example.com:5000/foo/bar:baz' == fail_1.msg
- fail_2 is failed - fail_2 is failed
- >- - >-
'Cannot push an image by ID' == fail_2.msg 'Cannot push an image by ID' == fail_2.msg
- fail_3 is failed - fail_3 is failed
- >- - >-
'Cannot push an image by digest' == fail_3.msg 'Cannot push an image by digest' == fail_3.msg
- fail_4 is failed - fail_4 is failed
- >- - >-
'"foo/bar" is not a valid docker tag!' == fail_4.msg '"foo/bar" is not a valid docker tag!' == fail_4.msg
- fail_5 is failed - fail_5 is failed
- >- - >-
'"foo bar" is not a valid docker tag!' == fail_5.msg '"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 # SPDX-License-Identifier: GPL-3.0-or-later
- block: - block:
- name: Log out server - name: Log out server
docker_login: docker_login:
registry_url: "{{ registry_frontend_address }}" registry_url: "{{ registry_frontend_address }}"
username: testuser username: testuser
password: hunter2 password: hunter2
state: absent state: absent
- name: Log in with wrong password (check mode) - name: Log in with wrong password (check mode)
docker_login: docker_login:
registry_url: "{{ registry_frontend_address }}" registry_url: "{{ registry_frontend_address }}"
username: testuser username: testuser
password: "1234" password: "1234"
state: present state: present
register: login_failed_check register: login_failed_check
ignore_errors: true ignore_errors: true
check_mode: true check_mode: true
- name: Log in with wrong password - name: Log in with wrong password
docker_login: docker_login:
registry_url: "{{ registry_frontend_address }}" registry_url: "{{ registry_frontend_address }}"
username: testuser username: testuser
password: "1234" password: "1234"
state: present state: present
register: login_failed register: login_failed
ignore_errors: true ignore_errors: true
- name: Make sure that login failed - name: Make sure that login failed
assert: assert:
that: that:
- login_failed_check is failed - login_failed_check is failed
- "('login attempt to http://' ~ registry_frontend_address ~ '/v2/ failed') in login_failed_check.msg" - "('login attempt to http://' ~ registry_frontend_address ~ '/v2/ failed') in login_failed_check.msg"
- login_failed is failed - login_failed is failed
- "('login attempt to http://' ~ registry_frontend_address ~ '/v2/ failed') in login_failed.msg" - "('login attempt to http://' ~ registry_frontend_address ~ '/v2/ failed') in login_failed.msg"
- name: Log in (check mode) - name: Log in (check mode)
docker_login: docker_login:
registry_url: "{{ registry_frontend_address }}" registry_url: "{{ registry_frontend_address }}"
username: testuser username: testuser
password: hunter2 password: hunter2
state: present state: present
register: login_1 register: login_1
check_mode: true check_mode: true
- name: Log in - name: Log in
docker_login: docker_login:
registry_url: "{{ registry_frontend_address }}" registry_url: "{{ registry_frontend_address }}"
username: testuser username: testuser
password: hunter2 password: hunter2
state: present state: present
register: login_2 register: login_2
- name: Get permissions of ~/.docker/config.json - name: Get permissions of ~/.docker/config.json
stat: stat:
path: ~/.docker/config.json path: ~/.docker/config.json
register: login_2_stat register: login_2_stat
- name: Log in (idempotent) - name: Log in (idempotent)
docker_login: docker_login:
registry_url: "{{ registry_frontend_address }}" registry_url: "{{ registry_frontend_address }}"
username: testuser username: testuser
password: hunter2 password: hunter2
state: present state: present
register: login_3 register: login_3
- name: Log in (idempotent, check mode) - name: Log in (idempotent, check mode)
docker_login: docker_login:
registry_url: "{{ registry_frontend_address }}" registry_url: "{{ registry_frontend_address }}"
username: testuser username: testuser
password: hunter2 password: hunter2
state: present state: present
register: login_4 register: login_4
check_mode: true check_mode: true
- name: Make sure that login worked - name: Make sure that login worked
assert: assert:
that: that:
- login_1 is changed - login_1 is changed
- login_2 is changed - login_2 is changed
- login_3 is not changed - login_3 is not changed
- login_4 is not changed - login_4 is not changed
- login_2_stat.stat.mode == '0600' - login_2_stat.stat.mode == '0600'
- name: Log in again with wrong password (check mode) - name: Log in again with wrong password (check mode)
docker_login: docker_login:
registry_url: "{{ registry_frontend_address }}" registry_url: "{{ registry_frontend_address }}"
username: testuser username: testuser
password: "1234" password: "1234"
state: present state: present
register: login_failed_check register: login_failed_check
ignore_errors: true ignore_errors: true
check_mode: true check_mode: true
- name: Log in again with wrong password - name: Log in again with wrong password
docker_login: docker_login:
registry_url: "{{ registry_frontend_address }}" registry_url: "{{ registry_frontend_address }}"
username: testuser username: testuser
password: "1234" password: "1234"
state: present state: present
register: login_failed register: login_failed
ignore_errors: true ignore_errors: true
- name: Make sure that login failed again - name: Make sure that login failed again
assert: assert:
that: that:
- login_failed_check is failed - login_failed_check is failed
- "('login attempt to http://' ~ registry_frontend_address ~ '/v2/ failed') in login_failed_check.msg" - "('login attempt to http://' ~ registry_frontend_address ~ '/v2/ failed') in login_failed_check.msg"
- login_failed is failed - login_failed is failed
- "('login attempt to http://' ~ registry_frontend_address ~ '/v2/ failed') in login_failed.msg" - "('login attempt to http://' ~ registry_frontend_address ~ '/v2/ failed') in login_failed.msg"
- name: Log out (check mode) - name: Log out (check mode)
docker_login: docker_login:
registry_url: "{{ registry_frontend_address }}" registry_url: "{{ registry_frontend_address }}"
state: absent state: absent
register: logout_1 register: logout_1
check_mode: true check_mode: true
- name: Log out - name: Log out
docker_login: docker_login:
registry_url: "{{ registry_frontend_address }}" registry_url: "{{ registry_frontend_address }}"
state: absent state: absent
register: logout_2 register: logout_2
- name: Log out (idempotent) - name: Log out (idempotent)
docker_login: docker_login:
registry_url: "{{ registry_frontend_address }}" registry_url: "{{ registry_frontend_address }}"
state: absent state: absent
register: logout_3 register: logout_3
- name: Log out (idempotent, check mode) - name: Log out (idempotent, check mode)
docker_login: docker_login:
registry_url: "{{ registry_frontend_address }}" registry_url: "{{ registry_frontend_address }}"
state: absent state: absent
register: logout_4 register: logout_4
check_mode: true check_mode: true
- name: Make sure that login worked - name: Make sure that login worked
assert: assert:
that: that:
- logout_1 is changed - logout_1 is changed
- logout_2 is changed - logout_2 is changed
- logout_3 is not changed - logout_3 is not changed
- logout_4 is not changed - logout_4 is not changed
when: registry_frontend_address != 'n/a' when: registry_frontend_address != 'n/a'

View File

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

View File

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

View File

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

View File

@ -40,9 +40,9 @@
- assert: - assert:
that: that:
- internal_1 is changed - internal_1 is changed
- internal_2 is not changed - internal_2 is not changed
- internal_3 is changed - internal_3 is changed
#################################################################### ####################################################################
## driver_options ################################################## ## driver_options ##################################################
@ -91,62 +91,62 @@
- assert: - assert:
that: that:
- driver_options_1 is changed - driver_options_1 is changed
- driver_options_2 is not changed - driver_options_2 is not changed
- driver_options_3 is not changed - driver_options_3 is not changed
- driver_options_4 is changed - driver_options_4 is changed
- driver_options_5 is not changed - driver_options_5 is not changed
#################################################################### ####################################################################
## scope ########################################################### ## scope ###########################################################
#################################################################### ####################################################################
- block: - block:
- name: scope - name: scope
docker_network: docker_network:
name: "{{ nname_1 }}" name: "{{ nname_1 }}"
driver: bridge driver: bridge
scope: local scope: local
register: scope_1 register: scope_1
- name: scope (idempotency) - name: scope (idempotency)
docker_network: docker_network:
name: "{{ nname_1 }}" name: "{{ nname_1 }}"
driver: bridge driver: bridge
scope: local scope: local
register: scope_2 register: scope_2
- name: swarm - name: swarm
docker_swarm: docker_swarm:
state: present state: present
advertise_addr: "{{ ansible_default_ipv4.address | default('127.0.0.1') }}" 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. # 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. # 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) - name: scope (change)
docker_network: docker_network:
name: "{{ nname_1 }}" name: "{{ nname_1 }}"
driver: overlay driver: overlay
scope: swarm scope: swarm
register: scope_3 register: scope_3
- name: cleanup network - name: cleanup network
docker_network: docker_network:
name: "{{ nname_1 }}" name: "{{ nname_1 }}"
state: absent state: absent
force: true force: true
- assert: - assert:
that: that:
- scope_1 is changed - scope_1 is changed
- scope_2 is not changed - scope_2 is not changed
- scope_3 is changed - scope_3 is changed
always: always:
- name: cleanup swarm - name: cleanup swarm
docker_swarm: docker_swarm:
state: absent state: absent
force: true force: true
#################################################################### ####################################################################
## attachable ###################################################### ## attachable ######################################################
@ -181,9 +181,9 @@
- assert: - assert:
that: that:
- attachable_1 is changed - attachable_1 is changed
- attachable_2 is not changed - attachable_2 is not changed
- attachable_3 is changed - attachable_3 is changed
#################################################################### ####################################################################
## labels ########################################################## ## labels ##########################################################
@ -228,7 +228,7 @@
- assert: - assert:
that: that:
- labels_1 is changed - labels_1 is changed
- labels_2 is not changed - labels_2 is not changed
- labels_3 is not changed - labels_3 is not changed
- labels_4 is changed - labels_4 is changed

View File

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

View File

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

View File

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

View File

@ -10,30 +10,30 @@
# Run the tests # Run the tests
- block: - block:
- include_tasks: test_node.yml - include_tasks: test_node.yml
always: always:
- name: Cleanup (trying) - name: Cleanup (trying)
docker_swarm: docker_swarm:
state: absent state: absent
force: true force: true
diff: false diff: false
ignore_errors: true ignore_errors: true
- name: Restart docker daemon - name: Restart docker daemon
service: service:
name: docker name: docker
state: restarted state: restarted
become: true become: true
- name: Wait for docker daemon to be fully restarted - name: Wait for docker daemon to be fully restarted
command: docker ps command: docker ps
ignore_errors: true ignore_errors: true
- name: Cleanup - name: Cleanup
docker_swarm: docker_swarm:
state: absent state: absent
force: true force: true
diff: false diff: false
when: docker_py_version is version('2.4.0', '>=') and docker_api_version is version('1.25', '>=') 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 # SPDX-License-Identifier: GPL-3.0-or-later
- block: - block:
- name: Make sure we're not already using Docker swarm - name: Make sure we're not already using Docker swarm
docker_swarm: docker_swarm:
state: absent state: absent
force: true force: true
- name: Try to get docker_node_info when docker is not running in swarm mode - name: Try to get docker_node_info when docker is not running in swarm mode
docker_node_info: docker_node_info:
ignore_errors: true ignore_errors: true
register: output register: output
- name: assert failure when called when swarm is not in use or not run on manager node - name: assert failure when called when swarm is not in use or not run on manager node
assert: assert:
that: that:
- 'output is failed' - 'output is failed'
- 'output.msg == "Error running docker swarm module: must run on swarm manager node"' - 'output.msg == "Error running docker swarm module: must run on swarm manager node"'
- name: Create a Swarm cluster - name: Create a Swarm cluster
docker_swarm: docker_swarm:
state: present state: present
advertise_addr: "{{ansible_default_ipv4.address | default('127.0.0.1')}}" advertise_addr: "{{ansible_default_ipv4.address | default('127.0.0.1')}}"
register: output register: output
- name: assert changed when create a new swarm cluster - name: assert changed when create a new swarm cluster
assert: assert:
that: that:
- 'output is changed' - 'output is changed'
- '(output.actions[0] | regex_search("New Swarm cluster created: ")) is truthy' - '(output.actions[0] | regex_search("New Swarm cluster created: ")) is truthy'
- 'output.swarm_facts.JoinTokens.Manager is truthy' - 'output.swarm_facts.JoinTokens.Manager is truthy'
- 'output.swarm_facts.JoinTokens.Worker 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 - name: Try to get docker_node_info when docker is running in swarm mode and as manager
docker_node_info: docker_node_info:
register: output register: output
- name: assert reading docker swarm node facts - name: assert reading docker swarm node facts
assert: assert:
that: that:
- 'output.nodes | length > 0' - 'output.nodes | length > 0'
- 'output.nodes[0].ID is string' - 'output.nodes[0].ID is string'
- name: Try to get docker_node_info using the self parameter - name: Try to get docker_node_info using the self parameter
docker_node_info: docker_node_info:
self: true self: true
register: output register: output
- name: assert reading swarm facts with list of nodes option - name: assert reading swarm facts with list of nodes option
assert: assert:
that: that:
- 'output.nodes | length == 1' - 'output.nodes | length == 1'
- 'output.nodes[0].ID is string' - 'output.nodes[0].ID is string'
- name: Get local docker node name - name: Get local docker node name
set_fact: set_fact:
localnodename: "{{ output.nodes[0].Description.Hostname }}" localnodename: "{{ output.nodes[0].Description.Hostname }}"
- name: Try to get docker_node_info using the local node name as parameter - name: Try to get docker_node_info using the local node name as parameter
docker_node_info: docker_node_info:
name: "{{ localnodename }}" name: "{{ localnodename }}"
register: output register: output
- name: assert reading reading swarm facts and using node filter (random node name) - name: assert reading reading swarm facts and using node filter (random node name)
assert: assert:
that: that:
- 'output.nodes | length == 1' - 'output.nodes | length == 1'
- 'output.nodes[0].ID is string' - 'output.nodes[0].ID is string'
- name: Create random name - name: Create random name
set_fact: set_fact:
randomnodename: "{{ 'node-%0x' % ((2**32) | random) }}" randomnodename: "{{ 'node-%0x' % ((2**32) | random) }}"
- name: Try to get docker_node_info using random node name as parameter - name: Try to get docker_node_info using random node name as parameter
docker_node_info: docker_node_info:
name: "{{ randomnodename }}" name: "{{ randomnodename }}"
register: output register: output
- name: assert reading reading swarm facts and using node filter (random node name) - name: assert reading reading swarm facts and using node filter (random node name)
assert: assert:
that: that:
- 'output.nodes | length == 0' - 'output.nodes | length == 0'
always: always:
- name: Cleanup - name: Cleanup
docker_swarm: docker_swarm:
state: absent state: absent
force: true force: true

View File

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

View File

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

View File

@ -15,159 +15,159 @@
vname: "{{ 'ansible-volume-%0x' % ((2**32) | random) }}" vname: "{{ 'ansible-volume-%0x' % ((2**32) | random) }}"
- block: - block:
# Create objects to be pruned # Create objects to be pruned
- name: Create container (without volume) - name: Create container (without volume)
docker_container: docker_container:
name: "{{ cname }}" name: "{{ cname }}"
image: "{{ docker_test_image_hello_world }}" image: "{{ docker_test_image_hello_world }}"
state: present state: present
register: container register: container
- name: Create network - name: Create network
docker_network: docker_network:
name: "{{ nname }}" name: "{{ nname }}"
state: present state: present
register: network register: network
- name: Create named volume - name: Create named volume
docker_volume: docker_volume:
name: "{{ vname }}" name: "{{ vname }}"
state: present state: present
register: volume register: volume
- name: Create anonymous volume - name: Create anonymous volume
command: docker volume create command: docker volume create
register: volume_anon register: volume_anon
- name: List volumes - name: List volumes
command: docker volume list command: docker volume list
# Prune objects # Prune objects
- name: Prune everything - 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
docker_prune: docker_prune:
containers: true
images: true
networks: true
volumes: true volumes: true
volumes_filters: builder_cache: true
all: true
register: result register: result
# Analyze result
- name: Show results - name: Show results
debug: debug:
var: result var: result
- name: General checks
- name: Check results
assert: assert:
that: that:
- result is changed - 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" - "'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', '>=') when: docker_api_version is version('1.25', '>=')

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -18,8 +18,8 @@
- name: assert failure when called with state=join and no remote_addrs,join_token - name: assert failure when called with state=join and no remote_addrs,join_token
assert: assert:
that: that:
- 'output.failed' - 'output.failed'
- 'output.msg == "state is join but all of the following are missing: remote_addrs, join_token"' - 'output.msg == "state is join but all of the following are missing: remote_addrs, join_token"'
- name: Test parameters with state=remove - name: Test parameters with state=remove
docker_swarm: docker_swarm:
@ -30,8 +30,8 @@
- name: assert failure when called with state=remove and no node_id - name: assert failure when called with state=remove and no node_id
assert: assert:
that: that:
- 'output.failed' - 'output.failed'
- 'output.msg == "state is remove but all of the following are missing: node_id"' - 'output.msg == "state is remove but all of the following are missing: node_id"'
#################################################################### ####################################################################
## Creation ######################################################## ## Creation ########################################################
@ -87,27 +87,27 @@
- name: assert changed when create a new swarm cluster - name: assert changed when create a new swarm cluster
assert: assert:
that: that:
- 'output_1 is changed' - 'output_1 is changed'
- 'output_1.diff.before is defined' - 'output_1.diff.before is defined'
- 'output_1.diff.after is defined' - 'output_1.diff.after is defined'
- 'output_2 is changed' - 'output_2 is changed'
- '(output_2.actions[0] | regex_search("New Swarm cluster created: ")) is truthy' - '(output_2.actions[0] | regex_search("New Swarm cluster created: ")) is truthy'
- 'output_2.swarm_facts.JoinTokens.Manager is truthy' - 'output_2.swarm_facts.JoinTokens.Manager is truthy'
- 'output_2.swarm_facts.JoinTokens.Worker is truthy' - 'output_2.swarm_facts.JoinTokens.Worker is truthy'
- 'output_2.diff.before is defined' - 'output_2.diff.before is defined'
- 'output_2.diff.after is defined' - 'output_2.diff.after is defined'
- 'output_3 is not changed' - 'output_3 is not changed'
- 'output_3.diff.before is defined' - 'output_3.diff.before is defined'
- 'output_3.diff.after is defined' - 'output_3.diff.after is defined'
- 'output_4 is not changed' - 'output_4 is not changed'
- 'output_4.diff.before is defined' - 'output_4.diff.before is defined'
- 'output_4.diff.after is defined' - 'output_4.diff.after is defined'
- 'output_5 is changed' - 'output_5 is changed'
- 'output_5.diff.before is defined' - 'output_5.diff.before is defined'
- 'output_5.diff.after is defined' - 'output_5.diff.after is defined'
- 'output_6 is changed' - 'output_6 is changed'
- 'output_6.diff.before is defined' - 'output_6.diff.before is defined'
- 'output_6.diff.after is defined' - 'output_6.diff.after is defined'
#################################################################### ####################################################################
## Removal ######################################################### ## Removal #########################################################
@ -146,18 +146,18 @@
- name: assert changed when remove a swarm cluster - name: assert changed when remove a swarm cluster
assert: assert:
that: that:
- 'output_1 is changed' - 'output_1 is changed'
- 'output_1.diff.before is defined' - 'output_1.diff.before is defined'
- 'output_1.diff.after is defined' - 'output_1.diff.after is defined'
- 'output_2 is changed' - 'output_2 is changed'
- 'output_2.actions[0] == "Node has left the swarm cluster"' - 'output_2.actions[0] == "Node has left the swarm cluster"'
- 'output_2.diff.before is defined' - 'output_2.diff.before is defined'
- 'output_2.diff.after is defined' - 'output_2.diff.after is defined'
- 'output_3 is not changed' - 'output_3 is not changed'
- 'output_3.diff.before is defined' - 'output_3.diff.before is defined'
- 'output_3.diff.after is defined' - 'output_3.diff.after is defined'
- 'output_4 is not changed' - 'output_4 is not changed'
- 'output_4.diff.before is defined' - 'output_4.diff.before is defined'
- 'output_4.diff.after is defined' - 'output_4.diff.after is defined'
- include_tasks: cleanup.yml - include_tasks: cleanup.yml

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