mirror of
https://github.com/ansible-collections/community.docker.git
synced 2026-03-15 19:58:28 +00:00
Fix linting errors.
This commit is contained in:
parent
795e6b23dc
commit
2487d1a0bf
@ -1,3 +1,4 @@
|
||||
---
|
||||
# Copyright (c) Ansible Project
|
||||
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
@ -49,11 +50,11 @@ jobs:
|
||||
parameters:
|
||||
jobs:
|
||||
- ${{ if eq(length(parameters.groups), 0) }}:
|
||||
- ${{ each target in parameters.targets }}:
|
||||
- name: ${{ format(parameters.nameFormat, coalesce(target.name, target.test)) }}
|
||||
test: ${{ format(parameters.testFormat, coalesce(target.test, target.name)) }}
|
||||
- ${{ if not(eq(length(parameters.groups), 0)) }}:
|
||||
- ${{ each group in parameters.groups }}:
|
||||
- ${{ each target in parameters.targets }}:
|
||||
- name: ${{ format(format(parameters.nameGroupFormat, parameters.nameFormat), coalesce(target.name, target.test), group) }}
|
||||
test: ${{ format(format(parameters.testGroupFormat, parameters.testFormat), coalesce(target.test, target.name), group) }}
|
||||
- name: ${{ format(parameters.nameFormat, coalesce(target.name, target.test)) }}
|
||||
test: ${{ format(parameters.testFormat, coalesce(target.test, target.name)) }}
|
||||
- ${{ if not(eq(length(parameters.groups), 0)) }}:
|
||||
- ${{ each group in parameters.groups }}:
|
||||
- ${{ each target in parameters.targets }}:
|
||||
- name: ${{ format(format(parameters.nameGroupFormat, parameters.nameFormat), coalesce(target.name, target.test), group) }}
|
||||
test: ${{ format(format(parameters.testGroupFormat, parameters.testFormat), coalesce(target.test, target.name), group) }}
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
---
|
||||
# Copyright (c) Ansible Project
|
||||
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
@ -13,37 +14,37 @@ parameters:
|
||||
|
||||
jobs:
|
||||
- ${{ each job in parameters.jobs }}:
|
||||
- job: test_${{ replace(replace(replace(job.test, '/', '_'), '.', '_'), '-', '_') }}
|
||||
displayName: ${{ job.name }}
|
||||
container: default
|
||||
workspace:
|
||||
clean: all
|
||||
steps:
|
||||
- checkout: self
|
||||
fetchDepth: $(fetchDepth)
|
||||
path: $(checkoutPath)
|
||||
- bash: .azure-pipelines/scripts/run-tests.sh "$(entryPoint)" "${{ job.test }}" "$(coverageBranches)"
|
||||
displayName: Run Tests
|
||||
- bash: .azure-pipelines/scripts/process-results.sh
|
||||
condition: succeededOrFailed()
|
||||
displayName: Process Results
|
||||
- bash: .azure-pipelines/scripts/aggregate-coverage.sh "$(Agent.TempDirectory)"
|
||||
condition: eq(variables.haveCoverageData, 'true')
|
||||
displayName: Aggregate Coverage Data
|
||||
- task: PublishTestResults@2
|
||||
condition: eq(variables.haveTestResults, 'true')
|
||||
inputs:
|
||||
testResultsFiles: "$(outputPath)/junit/*.xml"
|
||||
displayName: Publish Test Results
|
||||
- task: PublishPipelineArtifact@1
|
||||
condition: eq(variables.haveBotResults, 'true')
|
||||
displayName: Publish Bot Results
|
||||
inputs:
|
||||
targetPath: "$(outputPath)/bot/"
|
||||
artifactName: "Bot $(System.JobAttempt) $(System.StageDisplayName) $(System.JobDisplayName)"
|
||||
- task: PublishPipelineArtifact@1
|
||||
condition: eq(variables.haveCoverageData, 'true')
|
||||
displayName: Publish Coverage Data
|
||||
inputs:
|
||||
targetPath: "$(Agent.TempDirectory)/coverage/"
|
||||
artifactName: "Coverage $(System.JobAttempt) $(System.StageDisplayName) $(System.JobDisplayName)"
|
||||
- job: test_${{ replace(replace(replace(job.test, '/', '_'), '.', '_'), '-', '_') }}
|
||||
displayName: ${{ job.name }}
|
||||
container: default
|
||||
workspace:
|
||||
clean: all
|
||||
steps:
|
||||
- checkout: self
|
||||
fetchDepth: $(fetchDepth)
|
||||
path: $(checkoutPath)
|
||||
- bash: .azure-pipelines/scripts/run-tests.sh "$(entryPoint)" "${{ job.test }}" "$(coverageBranches)"
|
||||
displayName: Run Tests
|
||||
- bash: .azure-pipelines/scripts/process-results.sh
|
||||
condition: succeededOrFailed()
|
||||
displayName: Process Results
|
||||
- bash: .azure-pipelines/scripts/aggregate-coverage.sh "$(Agent.TempDirectory)"
|
||||
condition: eq(variables.haveCoverageData, 'true')
|
||||
displayName: Aggregate Coverage Data
|
||||
- task: PublishTestResults@2
|
||||
condition: eq(variables.haveTestResults, 'true')
|
||||
inputs:
|
||||
testResultsFiles: "$(outputPath)/junit/*.xml"
|
||||
displayName: Publish Test Results
|
||||
- task: PublishPipelineArtifact@1
|
||||
condition: eq(variables.haveBotResults, 'true')
|
||||
displayName: Publish Bot Results
|
||||
inputs:
|
||||
targetPath: "$(outputPath)/bot/"
|
||||
artifactName: "Bot $(System.JobAttempt) $(System.StageDisplayName) $(System.JobDisplayName)"
|
||||
- task: PublishPipelineArtifact@1
|
||||
condition: eq(variables.haveCoverageData, 'true')
|
||||
displayName: Publish Coverage Data
|
||||
inputs:
|
||||
targetPath: "$(Agent.TempDirectory)/coverage/"
|
||||
artifactName: "Coverage $(System.JobAttempt) $(System.StageDisplayName) $(System.JobDisplayName)"
|
||||
|
||||
2
.github/workflows/ansible-test.yml
vendored
2
.github/workflows/ansible-test.yml
vendored
@ -7,7 +7,7 @@
|
||||
# https://github.com/marketplace/actions/ansible-test
|
||||
|
||||
name: EOL CI
|
||||
on:
|
||||
'on':
|
||||
# Run EOL CI against all pushes (direct commits, also merged PRs), Pull Requests
|
||||
push:
|
||||
branches:
|
||||
|
||||
2
.github/workflows/docker-images.yml
vendored
2
.github/workflows/docker-images.yml
vendored
@ -4,7 +4,7 @@
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
name: Helper Docker images for testing
|
||||
on:
|
||||
'on':
|
||||
# Run CI against all pushes (direct commits, also merged PRs), Pull Requests
|
||||
push:
|
||||
branches:
|
||||
|
||||
2
.github/workflows/docs-pr.yml
vendored
2
.github/workflows/docs-pr.yml
vendored
@ -7,7 +7,7 @@ name: Collection Docs
|
||||
concurrency:
|
||||
group: docs-pr-${{ github.head_ref }}
|
||||
cancel-in-progress: true
|
||||
on:
|
||||
'on':
|
||||
pull_request_target:
|
||||
types: [opened, synchronize, reopened, closed]
|
||||
|
||||
|
||||
2
.github/workflows/docs-push.yml
vendored
2
.github/workflows/docs-push.yml
vendored
@ -7,7 +7,7 @@ name: Collection Docs
|
||||
concurrency:
|
||||
group: docs-push-${{ github.sha }}
|
||||
cancel-in-progress: true
|
||||
on:
|
||||
'on':
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
|
||||
2
.github/workflows/ee.yml
vendored
2
.github/workflows/ee.yml
vendored
@ -4,7 +4,7 @@
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
name: execution environment
|
||||
on:
|
||||
'on':
|
||||
# Run CI against all pushes (direct commits, also merged PRs), Pull Requests
|
||||
push:
|
||||
branches:
|
||||
|
||||
@ -15,7 +15,7 @@ description: Modules and plugins for working with Docker
|
||||
license:
|
||||
- GPL-3.0-or-later
|
||||
- Apache-2.0
|
||||
#license_file: COPYING
|
||||
# license_file: COPYING
|
||||
tags:
|
||||
- docker
|
||||
dependencies:
|
||||
|
||||
@ -27,6 +27,7 @@ extends_documentation_fragment:
|
||||
"""
|
||||
|
||||
EXAMPLES = r"""
|
||||
---
|
||||
- name: Get facts on current container
|
||||
community.docker.current_container_facts:
|
||||
|
||||
|
||||
@ -178,6 +178,7 @@ seealso:
|
||||
"""
|
||||
|
||||
EXAMPLES = r"""
|
||||
---
|
||||
# Examples use the django example at https://docs.docker.com/compose/django. Follow it to create the
|
||||
# flask directory
|
||||
|
||||
|
||||
@ -119,6 +119,7 @@ notes:
|
||||
"""
|
||||
|
||||
EXAMPLES = r"""
|
||||
---
|
||||
- name: Run a simple command (command)
|
||||
community.docker.docker_compose_v2_exec:
|
||||
service: foo
|
||||
|
||||
@ -75,6 +75,7 @@ seealso:
|
||||
"""
|
||||
|
||||
EXAMPLES = r"""
|
||||
---
|
||||
- name: Pull images for flask project
|
||||
community.docker.docker_compose_v2_pull:
|
||||
project_src: /path/to/flask
|
||||
|
||||
@ -187,6 +187,7 @@ notes:
|
||||
"""
|
||||
|
||||
EXAMPLES = r"""
|
||||
---
|
||||
- name: Run a simple command (command)
|
||||
community.docker.docker_compose_v2_run:
|
||||
service: foo
|
||||
|
||||
@ -111,6 +111,7 @@ author:
|
||||
"""
|
||||
|
||||
EXAMPLES = r"""
|
||||
---
|
||||
- name: Create config foo (from a file on the control machine)
|
||||
community.docker.docker_config:
|
||||
name: foo
|
||||
|
||||
@ -996,6 +996,7 @@ requirements:
|
||||
"""
|
||||
|
||||
EXAMPLES = r"""
|
||||
---
|
||||
- name: Create a data container
|
||||
community.docker.docker_container:
|
||||
name: mydata
|
||||
|
||||
@ -120,6 +120,7 @@ requirements:
|
||||
"""
|
||||
|
||||
EXAMPLES = r"""
|
||||
---
|
||||
- name: Copy a file into the container
|
||||
community.docker.docker_container_copy_into:
|
||||
container: mydata
|
||||
|
||||
@ -111,6 +111,7 @@ requirements:
|
||||
"""
|
||||
|
||||
EXAMPLES = r"""
|
||||
---
|
||||
- name: Run a simple command (command)
|
||||
community.docker.docker_container_exec:
|
||||
container: foo
|
||||
|
||||
@ -40,6 +40,7 @@ requirements:
|
||||
"""
|
||||
|
||||
EXAMPLES = r"""
|
||||
---
|
||||
- name: Get infos on container
|
||||
community.docker.docker_container_info:
|
||||
name: mydata
|
||||
|
||||
@ -51,6 +51,7 @@ author:
|
||||
"""
|
||||
|
||||
EXAMPLES = r"""
|
||||
---
|
||||
- name: Get infos on contexts
|
||||
community.docker.docker_context_info:
|
||||
register: result
|
||||
|
||||
@ -122,6 +122,7 @@ requirements:
|
||||
"""
|
||||
|
||||
EXAMPLES = r"""
|
||||
---
|
||||
- name: Get info on docker host
|
||||
community.docker.docker_host_info:
|
||||
register: result
|
||||
|
||||
@ -263,6 +263,7 @@ seealso:
|
||||
"""
|
||||
|
||||
EXAMPLES = r"""
|
||||
---
|
||||
- name: Pull an image
|
||||
community.docker.docker_image:
|
||||
name: pacur/centos-7
|
||||
|
||||
@ -248,6 +248,7 @@ seealso:
|
||||
"""
|
||||
|
||||
EXAMPLES = r"""
|
||||
---
|
||||
- name: Build Python 3.12 image
|
||||
community.docker.docker_image_build:
|
||||
name: localhost/python/3.12:latest
|
||||
|
||||
@ -71,6 +71,7 @@ seealso:
|
||||
"""
|
||||
|
||||
EXAMPLES = r"""
|
||||
---
|
||||
- name: Export an image
|
||||
community.docker.docker_image_export:
|
||||
name: pacur/centos-7
|
||||
|
||||
@ -46,6 +46,7 @@ author:
|
||||
"""
|
||||
|
||||
EXAMPLES = r"""
|
||||
---
|
||||
- name: Inspect a single image
|
||||
community.docker.docker_image_info:
|
||||
name: pacur/centos-7
|
||||
@ -71,20 +72,68 @@ images:
|
||||
returned: always
|
||||
type: list
|
||||
elements: dict
|
||||
sample: [{"Architecture": "amd64", "Author": "", "Comment": "", "Config": {"AttachStderr": false, "AttachStdin": false,
|
||||
"AttachStdout": false, "Cmd": ["/etc/docker/registry/config.yml"], "Domainname": "", "Entrypoint": ["/bin/registry"],
|
||||
"Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"], "ExposedPorts": {"5000/tcp": {}},
|
||||
"Hostname": "e5c68db50333", "Image": "c72dce2618dc8f7b794d2b2c2b1e64e0205ead5befc294f8111da23bd6a2c799", "Labels": {},
|
||||
"OnBuild": [], "OpenStdin": false, "StdinOnce": false, "Tty": false, "User": "", "Volumes": {"/var/lib/registry": {}},
|
||||
"WorkingDir": ""}, "Container": "e83a452b8fb89d78a25a6739457050131ca5c863629a47639530d9ad2008d610", "ContainerConfig": {
|
||||
"AttachStderr": false, "AttachStdin": false, "AttachStdout": false, "Cmd": ["/bin/sh", "-c", '#(nop) CMD ["/etc/docker/registry/config.yml"]'],
|
||||
"Domainname": "", "Entrypoint": ["/bin/registry"], "Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],
|
||||
"ExposedPorts": {"5000/tcp": {}}, "Hostname": "e5c68db50333", "Image": "c72dce2618dc8f7b794d2b2c2b1e64e0205ead5befc294f8111da23bd6a2c799",
|
||||
"Labels": {}, "OnBuild": [], "OpenStdin": false, "StdinOnce": false, "Tty": false, "User": "", "Volumes": {"/var/lib/registry": {}},
|
||||
"WorkingDir": ""}, "Created": "2016-03-08T21:08:15.399680378Z", "DockerVersion": "1.9.1", "GraphDriver": {"Data": null,
|
||||
"Name": "aufs"}, "Id": "53773d8552f07b730f3e19979e32499519807d67b344141d965463a950a66e08", "Name": "registry:2",
|
||||
"Os": "linux", "Parent": "f0b1f729f784b755e7bf9c8c2e65d8a0a35a533769c2588f02895f6781ac0805", "RepoDigests": [], "RepoTags": [
|
||||
"registry:2"], "Size": 0, "VirtualSize": 165808884}]
|
||||
sample: [
|
||||
{
|
||||
"Architecture": "amd64",
|
||||
"Author": "",
|
||||
"Comment": "",
|
||||
"Config": {
|
||||
"AttachStderr": false,
|
||||
"AttachStdin": false,
|
||||
"AttachStdout": false,
|
||||
"Cmd": ["/etc/docker/registry/config.yml"],
|
||||
"Domainname": "",
|
||||
"Entrypoint": ["/bin/registry"],
|
||||
"Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],
|
||||
"ExposedPorts": {"5000/tcp": {}},
|
||||
"Hostname": "e5c68db50333",
|
||||
"Image": "c72dce2618dc8f7b794d2b2c2b1e64e0205ead5befc294f8111da23bd6a2c799",
|
||||
"Labels": {},
|
||||
"OnBuild": [],
|
||||
"OpenStdin": false,
|
||||
"StdinOnce": false,
|
||||
"Tty": false,
|
||||
"User": "",
|
||||
"Volumes": {"/var/lib/registry": {}},
|
||||
"WorkingDir": "",
|
||||
},
|
||||
"Container": "e83a452b8fb89d78a25a6739457050131ca5c863629a47639530d9ad2008d610",
|
||||
"ContainerConfig": {
|
||||
"AttachStderr": false,
|
||||
"AttachStdin": false,
|
||||
"AttachStdout": false,
|
||||
"Cmd": ["/bin/sh", "-c", '#(nop) CMD ["/etc/docker/registry/config.yml"]'],
|
||||
"Domainname": "",
|
||||
"Entrypoint": ["/bin/registry"],
|
||||
"Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],
|
||||
"ExposedPorts": {"5000/tcp": {}},
|
||||
"Hostname": "e5c68db50333",
|
||||
"Image": "c72dce2618dc8f7b794d2b2c2b1e64e0205ead5befc294f8111da23bd6a2c799",
|
||||
"Labels": {},
|
||||
"OnBuild": [],
|
||||
"OpenStdin": false,
|
||||
"StdinOnce": false,
|
||||
"Tty": false,
|
||||
"User": "",
|
||||
"Volumes": {"/var/lib/registry": {}},
|
||||
"WorkingDir": "",
|
||||
},
|
||||
"Created": "2016-03-08T21:08:15.399680378Z",
|
||||
"DockerVersion": "1.9.1",
|
||||
"GraphDriver": {
|
||||
"Data": null,
|
||||
"Name": "aufs",
|
||||
},
|
||||
"Id": "53773d8552f07b730f3e19979e32499519807d67b344141d965463a950a66e08",
|
||||
"Name": "registry:2",
|
||||
"Os": "linux",
|
||||
"Parent": "f0b1f729f784b755e7bf9c8c2e65d8a0a35a533769c2588f02895f6781ac0805",
|
||||
"RepoDigests": [],
|
||||
"RepoTags": ["registry:2"],
|
||||
"Size": 0,
|
||||
"VirtualSize": 165808884,
|
||||
},
|
||||
]
|
||||
"""
|
||||
|
||||
import traceback
|
||||
|
||||
@ -52,6 +52,7 @@ seealso:
|
||||
"""
|
||||
|
||||
EXAMPLES = r"""
|
||||
---
|
||||
- name: Load all image(s) from the given tar file
|
||||
community.docker.docker_image_load:
|
||||
path: /path/to/images.tar
|
||||
|
||||
@ -75,6 +75,7 @@ seealso:
|
||||
"""
|
||||
|
||||
EXAMPLES = r"""
|
||||
---
|
||||
- name: Pull an image
|
||||
community.docker.docker_image_pull:
|
||||
name: pacur/centos-7
|
||||
|
||||
@ -57,6 +57,7 @@ seealso:
|
||||
"""
|
||||
|
||||
EXAMPLES = r"""
|
||||
---
|
||||
- name: Push an image
|
||||
community.docker.docker_image_push:
|
||||
name: registry.example.com:5000/repo/image
|
||||
|
||||
@ -68,6 +68,7 @@ seealso:
|
||||
"""
|
||||
|
||||
EXAMPLES = r"""
|
||||
---
|
||||
- name: Remove an image
|
||||
community.docker.docker_image_remove:
|
||||
name: pacur/centos-7
|
||||
|
||||
@ -76,6 +76,7 @@ seealso:
|
||||
"""
|
||||
|
||||
EXAMPLES = r"""
|
||||
---
|
||||
- name: Tag Python 3.12 image with two new names
|
||||
community.docker.docker_image_tag:
|
||||
name: python:3.12
|
||||
|
||||
@ -85,6 +85,7 @@ author:
|
||||
"""
|
||||
|
||||
EXAMPLES = r"""
|
||||
---
|
||||
- name: Log into DockerHub
|
||||
community.docker.docker_login:
|
||||
username: docker
|
||||
|
||||
@ -203,6 +203,7 @@ requirements:
|
||||
"""
|
||||
|
||||
EXAMPLES = r"""
|
||||
---
|
||||
- name: Create a network
|
||||
community.docker.docker_network:
|
||||
name: network_one
|
||||
|
||||
@ -40,6 +40,7 @@ requirements:
|
||||
"""
|
||||
|
||||
EXAMPLES = r"""
|
||||
---
|
||||
- name: Get infos on network
|
||||
community.docker.docker_network_info:
|
||||
name: mydata
|
||||
@ -68,10 +69,32 @@ network:
|
||||
- Will be V(none) if network does not exist.
|
||||
returned: always
|
||||
type: dict
|
||||
sample: {"Attachable": false, "ConfigFrom": {"Network": ""}, "ConfigOnly": false, "Containers": {}, "Created": "2018-12-07T01:47:51.250835114-06:00",
|
||||
"Driver": "bridge", "EnableIPv6": false, "IPAM": {"Config": [{"Gateway": "192.168.96.1", "Subnet": "192.168.96.0/20"}],
|
||||
"Driver": "default", "Options": null}, "Id": "0856968545f22026c41c2c7c3d448319d3b4a6a03a40b148b3ac4031696d1c0a", "Ingress": false,
|
||||
"Internal": false, "Labels": {}, "Name": "ansible-test-f2700bba", "Options": {}, "Scope": "local"}
|
||||
sample: {
|
||||
"Attachable": false,
|
||||
"ConfigFrom": {"Network": ""},
|
||||
"ConfigOnly": false,
|
||||
"Containers": {},
|
||||
"Created": "2018-12-07T01:47:51.250835114-06:00",
|
||||
"Driver": "bridge",
|
||||
"EnableIPv6": false,
|
||||
"IPAM": {
|
||||
"Config": [
|
||||
{
|
||||
"Gateway": "192.168.96.1",
|
||||
"Subnet": "192.168.96.0/20",
|
||||
},
|
||||
],
|
||||
"Driver": "default",
|
||||
"Options": null,
|
||||
},
|
||||
"Id": "0856968545f22026c41c2c7c3d448319d3b4a6a03a40b148b3ac4031696d1c0a",
|
||||
"Ingress": false,
|
||||
"Internal": false,
|
||||
"Labels": {},
|
||||
"Name": "ansible-test-f2700bba",
|
||||
"Options": {},
|
||||
"Scope": "local",
|
||||
}
|
||||
"""
|
||||
|
||||
import traceback
|
||||
|
||||
@ -90,6 +90,7 @@ author:
|
||||
"""
|
||||
|
||||
EXAMPLES = r"""
|
||||
---
|
||||
- name: Set node role
|
||||
community.docker.docker_node:
|
||||
hostname: mynode
|
||||
|
||||
@ -52,6 +52,7 @@ requirements:
|
||||
"""
|
||||
|
||||
EXAMPLES = r"""
|
||||
---
|
||||
- name: Get info on all nodes
|
||||
community.docker.docker_node_info:
|
||||
register: result
|
||||
|
||||
@ -86,6 +86,7 @@ requirements:
|
||||
"""
|
||||
|
||||
EXAMPLES = r"""
|
||||
---
|
||||
- name: Install a plugin
|
||||
community.docker.docker_plugin:
|
||||
plugin_name: plugin_one
|
||||
|
||||
@ -114,6 +114,7 @@ requirements:
|
||||
"""
|
||||
|
||||
EXAMPLES = r"""
|
||||
---
|
||||
- name: Prune containers older than 24h
|
||||
community.docker.docker_prune:
|
||||
containers: true
|
||||
|
||||
@ -103,6 +103,7 @@ author:
|
||||
"""
|
||||
|
||||
EXAMPLES = r"""
|
||||
---
|
||||
- name: Create secret foo (from a file on the control machine)
|
||||
community.docker.docker_secret:
|
||||
name: foo
|
||||
|
||||
@ -128,6 +128,7 @@ stack_spec_diff:
|
||||
"""
|
||||
|
||||
EXAMPLES = r"""
|
||||
---
|
||||
- name: Deploy stack from a compose file
|
||||
community.docker.docker_stack:
|
||||
state: present
|
||||
|
||||
@ -66,6 +66,7 @@ results:
|
||||
"""
|
||||
|
||||
EXAMPLES = r"""
|
||||
---
|
||||
- name: Shows stack info
|
||||
community.docker.docker_stack_info:
|
||||
register: result
|
||||
|
||||
@ -59,14 +59,21 @@ results:
|
||||
description:
|
||||
- List of dictionaries containing the list of tasks associated to a stack name.
|
||||
sample:
|
||||
- {"CurrentState": "Running", "DesiredState": "Running", "Error": "", "ID": "7wqv6m02ugkw", "Image": "busybox", "Name": "test_stack.1",
|
||||
"Node": "swarm", "Ports": ""}
|
||||
- CurrentState: Running
|
||||
DesiredState: Running
|
||||
Error: ""
|
||||
ID: 7wqv6m02ugkw
|
||||
Image: busybox
|
||||
Name: test_stack.1
|
||||
Node: swarm
|
||||
Ports: ""
|
||||
returned: always
|
||||
type: list
|
||||
elements: dict
|
||||
"""
|
||||
|
||||
EXAMPLES = r"""
|
||||
---
|
||||
- name: Shows stack info
|
||||
community.docker.docker_stack_task_info:
|
||||
name: test_stack
|
||||
|
||||
@ -206,6 +206,7 @@ author:
|
||||
"""
|
||||
|
||||
EXAMPLES = r"""
|
||||
---
|
||||
- name: Init a new swarm with default parameters
|
||||
community.docker.docker_swarm:
|
||||
state: present
|
||||
|
||||
@ -89,6 +89,7 @@ requirements:
|
||||
"""
|
||||
|
||||
EXAMPLES = r"""
|
||||
---
|
||||
- name: Get info on Docker Swarm
|
||||
community.docker.docker_swarm_info:
|
||||
ignore_errors: true
|
||||
|
||||
@ -694,6 +694,7 @@ rebuilt:
|
||||
"""
|
||||
|
||||
EXAMPLES = r"""
|
||||
---
|
||||
- name: Set command and arguments
|
||||
community.docker.docker_swarm_service:
|
||||
name: myservice
|
||||
|
||||
@ -41,6 +41,7 @@ requirements:
|
||||
"""
|
||||
|
||||
EXAMPLES = r"""
|
||||
---
|
||||
- name: Get info from a service
|
||||
community.docker.docker_swarm_service_info:
|
||||
name: myservice
|
||||
|
||||
@ -91,6 +91,7 @@ requirements:
|
||||
"""
|
||||
|
||||
EXAMPLES = r"""
|
||||
---
|
||||
- name: Create a volume
|
||||
community.docker.docker_volume:
|
||||
name: volume_one
|
||||
|
||||
@ -38,6 +38,7 @@ requirements:
|
||||
"""
|
||||
|
||||
EXAMPLES = r"""
|
||||
---
|
||||
- name: Get infos on volume
|
||||
community.docker.docker_volume_info:
|
||||
name: mydata
|
||||
|
||||
@ -4,8 +4,8 @@
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
collections:
|
||||
- ansible.posix
|
||||
- community.crypto
|
||||
- community.general
|
||||
- community.internal_test_tools
|
||||
- community.library_inventory_filtering_v1
|
||||
- ansible.posix
|
||||
- community.crypto
|
||||
- community.general
|
||||
- community.internal_test_tools
|
||||
- community.library_inventory_filtering_v1
|
||||
|
||||
@ -8,41 +8,41 @@
|
||||
serial: 1
|
||||
tasks:
|
||||
|
||||
### raw with unicode arg and output
|
||||
### raw with unicode arg and output
|
||||
|
||||
- name: raw with unicode arg and output
|
||||
raw: echo 汉语
|
||||
register: command
|
||||
- name: check output of raw with unicode arg and output
|
||||
assert:
|
||||
that:
|
||||
- "'汉语' in command.stdout"
|
||||
- command is changed # as of 2.2, raw should default to changed: true for consistency w/ shell/command/script modules
|
||||
- name: raw with unicode arg and output
|
||||
raw: echo 汉语
|
||||
register: command
|
||||
- name: check output of raw with unicode arg and output
|
||||
assert:
|
||||
that:
|
||||
- "'汉语' in command.stdout"
|
||||
- command is changed # as of 2.2, raw should default to changed: true for consistency w/ shell/command/script modules
|
||||
|
||||
### copy local file with unicode filename and content
|
||||
### copy local file with unicode filename and content
|
||||
|
||||
- name: create local file with unicode filename and content
|
||||
local_action: lineinfile dest={{ local_tmp }}-汉语/汉语.txt create=true line=汉语
|
||||
- name: remove remote file with unicode filename and content
|
||||
action: "{{ action_prefix }}file path={{ remote_tmp }}-汉语/汉语.txt state=absent"
|
||||
- name: create remote directory with unicode name
|
||||
action: "{{ action_prefix }}file path={{ remote_tmp }}-汉语 state=directory"
|
||||
- name: copy local file with unicode filename and content
|
||||
action: "{{ action_prefix }}copy src={{ local_tmp }}-汉语/汉语.txt dest={{ remote_tmp }}-汉语/汉语.txt"
|
||||
- name: create local file with unicode filename and content
|
||||
local_action: lineinfile dest={{ local_tmp }}-汉语/汉语.txt create=true line=汉语
|
||||
- name: remove remote file with unicode filename and content
|
||||
action: "{{ action_prefix }}file path={{ remote_tmp }}-汉语/汉语.txt state=absent"
|
||||
- name: create remote directory with unicode name
|
||||
action: "{{ action_prefix }}file path={{ remote_tmp }}-汉语 state=directory"
|
||||
- name: copy local file with unicode filename and content
|
||||
action: "{{ action_prefix }}copy src={{ local_tmp }}-汉语/汉语.txt dest={{ remote_tmp }}-汉语/汉语.txt"
|
||||
|
||||
### fetch remote file with unicode filename and content
|
||||
### fetch remote file with unicode filename and content
|
||||
|
||||
- name: remove local file with unicode filename and content
|
||||
local_action: file path={{ local_tmp }}-汉语/汉语.txt state=absent
|
||||
- name: fetch remote file with unicode filename and content
|
||||
fetch: src={{ remote_tmp }}-汉语/汉语.txt dest={{ local_tmp }}-汉语/汉语.txt fail_on_missing=true validate_checksum=true flat=true
|
||||
- name: remove local file with unicode filename and content
|
||||
local_action: file path={{ local_tmp }}-汉语/汉语.txt state=absent
|
||||
- name: fetch remote file with unicode filename and content
|
||||
fetch: src={{ remote_tmp }}-汉语/汉语.txt dest={{ local_tmp }}-汉语/汉语.txt fail_on_missing=true validate_checksum=true flat=true
|
||||
|
||||
### remove local and remote temp files
|
||||
### remove local and remote temp files
|
||||
|
||||
- name: remove local temp file
|
||||
local_action: file path={{ local_tmp }}-汉语 state=absent
|
||||
- name: remove remote temp file
|
||||
action: "{{ action_prefix }}file path={{ remote_tmp }}-汉语 state=absent"
|
||||
- name: remove local temp file
|
||||
local_action: file path={{ local_tmp }}-汉语 state=absent
|
||||
- name: remove remote temp file
|
||||
action: "{{ action_prefix }}file path={{ remote_tmp }}-汉语 state=absent"
|
||||
|
||||
### test wait_for_connection plugin
|
||||
- ansible.builtin.wait_for_connection:
|
||||
### test wait_for_connection plugin
|
||||
- ansible.builtin.wait_for_connection:
|
||||
|
||||
@ -67,4 +67,4 @@
|
||||
- present_1.images[0].Tag == (docker_test_image_alpine | split(':') | last)
|
||||
- present_1.warnings | default([]) | select('regex', ' Please report this at ') | length == 0
|
||||
- >-
|
||||
("container " ~ pname ~ '-' ~ cname ~ "-1 exited (0)") in present_1.msg
|
||||
("container " ~ pname ~ '-' ~ cname ~ "-1 exited (0)") in present_1.msg
|
||||
|
||||
@ -4,313 +4,131 @@
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
- block:
|
||||
- shell: "docker info --format '{% raw %}{{json .}}{% endraw %}' | python -m json.tool"
|
||||
- shell: "docker info --format '{% raw %}{{json .}}{% endraw %}' | python -m json.tool"
|
||||
|
||||
- name: Make sure we're not already using Docker swarm
|
||||
docker_swarm:
|
||||
state: absent
|
||||
force: true
|
||||
- name: Make sure we're not already using Docker swarm
|
||||
docker_swarm:
|
||||
state: absent
|
||||
force: true
|
||||
|
||||
- shell: "docker info --format '{% raw %}{{json .}}{% endraw %}' | python -m json.tool"
|
||||
- shell: "docker info --format '{% raw %}{{json .}}{% endraw %}' | python -m json.tool"
|
||||
|
||||
- name: Create a Swarm cluster
|
||||
docker_swarm:
|
||||
name: default
|
||||
state: present
|
||||
advertise_addr: "{{ ansible_default_ipv4.address | default('127.0.0.1') }}"
|
||||
|
||||
- name: Parameter name should be required
|
||||
docker_config:
|
||||
state: present
|
||||
ignore_errors: true
|
||||
register: output
|
||||
|
||||
- name: Assert failure when called with no name
|
||||
assert:
|
||||
that:
|
||||
- 'output is failed'
|
||||
- 'output.msg == "missing required arguments: name"'
|
||||
|
||||
- name: Test parameters
|
||||
docker_config:
|
||||
name: foo
|
||||
state: present
|
||||
ignore_errors: true
|
||||
register: output
|
||||
|
||||
- name: Assert failure when called with no data
|
||||
assert:
|
||||
that:
|
||||
- 'output is failed'
|
||||
- 'output.msg == "state is present but any of the following are missing: data, data_src"'
|
||||
|
||||
- name: Create config
|
||||
docker_config:
|
||||
name: db_password
|
||||
data: opensesame!
|
||||
state: present
|
||||
register: output
|
||||
|
||||
- name: Create variable config_id
|
||||
set_fact:
|
||||
config_id: "{{ output.config_id }}"
|
||||
|
||||
- name: Inspect config
|
||||
command: "docker config inspect {{ config_id }}"
|
||||
register: inspect
|
||||
ignore_errors: true
|
||||
|
||||
- debug:
|
||||
var: inspect
|
||||
|
||||
- name: Assert config creation succeeded
|
||||
assert:
|
||||
that:
|
||||
- "'db_password' in inspect.stdout"
|
||||
- "'ansible_key' in inspect.stdout"
|
||||
when: inspect is not failed
|
||||
- assert:
|
||||
that:
|
||||
- "'is too new. Maximum supported API version is' in inspect.stderr"
|
||||
when: inspect is failed
|
||||
|
||||
- name: Create config again
|
||||
docker_config:
|
||||
name: db_password
|
||||
data: opensesame!
|
||||
state: present
|
||||
register: output
|
||||
|
||||
- name: Assert create config is idempotent
|
||||
assert:
|
||||
that:
|
||||
- output is not changed
|
||||
|
||||
- name: Write config into file
|
||||
copy:
|
||||
dest: "{{ remote_tmp_dir }}/data"
|
||||
content: |-
|
||||
opensesame!
|
||||
|
||||
- name: Create config again (from file)
|
||||
docker_config:
|
||||
name: db_password
|
||||
data_src: "{{ remote_tmp_dir }}/data"
|
||||
state: present
|
||||
register: output
|
||||
|
||||
- name: Assert create config is idempotent
|
||||
assert:
|
||||
that:
|
||||
- output is not changed
|
||||
|
||||
- name: Create config again (base64)
|
||||
docker_config:
|
||||
name: db_password
|
||||
data: b3BlbnNlc2FtZSE=
|
||||
data_is_b64: true
|
||||
state: present
|
||||
register: output
|
||||
|
||||
- name: Assert create config (base64) is idempotent
|
||||
assert:
|
||||
that:
|
||||
- output is not changed
|
||||
|
||||
- name: Update config
|
||||
docker_config:
|
||||
name: db_password
|
||||
data: newpassword!
|
||||
state: present
|
||||
register: output
|
||||
|
||||
- name: Assert config was updated
|
||||
assert:
|
||||
that:
|
||||
- output is changed
|
||||
- output.config_id != config_id
|
||||
|
||||
- name: Remove config
|
||||
docker_config:
|
||||
name: db_password
|
||||
state: absent
|
||||
|
||||
- name: Check that config is removed
|
||||
command: "docker config inspect {{ config_id }}"
|
||||
register: output
|
||||
ignore_errors: true
|
||||
|
||||
- name: Assert config was removed
|
||||
assert:
|
||||
that:
|
||||
- output is failed
|
||||
|
||||
- name: Remove config
|
||||
docker_config:
|
||||
name: db_password
|
||||
state: absent
|
||||
register: output
|
||||
|
||||
- name: Assert remove config is idempotent
|
||||
assert:
|
||||
that:
|
||||
- output is not changed
|
||||
|
||||
# Rolling update
|
||||
|
||||
- name: Create rolling config
|
||||
docker_config:
|
||||
name: rolling_password
|
||||
data: opensesame!
|
||||
rolling_versions: true
|
||||
state: present
|
||||
register: original_output
|
||||
|
||||
- name: Create variable config_id
|
||||
set_fact:
|
||||
config_id: "{{ original_output.config_id }}"
|
||||
|
||||
- name: Inspect config
|
||||
command: "docker config inspect {{ config_id }}"
|
||||
register: inspect
|
||||
ignore_errors: true
|
||||
|
||||
- debug:
|
||||
var: inspect
|
||||
|
||||
- name: Assert config creation succeeded
|
||||
assert:
|
||||
that:
|
||||
- "'rolling_password' in inspect.stdout"
|
||||
- "'ansible_key' in inspect.stdout"
|
||||
- "'ansible_version' in inspect.stdout"
|
||||
- original_output.config_name == 'rolling_password_v1'
|
||||
when: inspect is not failed
|
||||
- assert:
|
||||
that:
|
||||
- "'is too new. Maximum supported API version is' in inspect.stderr"
|
||||
when: inspect is failed
|
||||
|
||||
- name: Create config again
|
||||
docker_config:
|
||||
name: rolling_password
|
||||
data: newpassword!
|
||||
rolling_versions: true
|
||||
state: present
|
||||
register: new_output
|
||||
|
||||
- name: Assert that new version is created
|
||||
assert:
|
||||
that:
|
||||
- new_output is changed
|
||||
- new_output.config_id != original_output.config_id
|
||||
- new_output.config_name != original_output.config_name
|
||||
- new_output.config_name == 'rolling_password_v2'
|
||||
|
||||
- name: Remove rolling configs
|
||||
docker_config:
|
||||
name: rolling_password
|
||||
rolling_versions: true
|
||||
state: absent
|
||||
|
||||
- name: Check that config is removed
|
||||
command: "docker config inspect {{ original_output.config_id }}"
|
||||
register: output
|
||||
ignore_errors: true
|
||||
|
||||
- name: Assert config was removed
|
||||
assert:
|
||||
that:
|
||||
- output is failed
|
||||
|
||||
- name: Check that config is removed
|
||||
command: "docker config inspect {{ new_output.config_id }}"
|
||||
register: output
|
||||
ignore_errors: true
|
||||
|
||||
- name: Assert config was removed
|
||||
assert:
|
||||
that:
|
||||
- output is failed
|
||||
|
||||
# template_driver tests
|
||||
|
||||
- when: docker_py_version is version('5.0.3', '>=') and docker_api_version is version('1.37', '>=')
|
||||
block:
|
||||
|
||||
- name: Create regular config
|
||||
docker_config:
|
||||
name: db_password
|
||||
data: opensesame!
|
||||
- name: Create a Swarm cluster
|
||||
docker_swarm:
|
||||
name: default
|
||||
state: present
|
||||
advertise_addr: "{{ ansible_default_ipv4.address | default('127.0.0.1') }}"
|
||||
|
||||
- name: Update config with template_driver
|
||||
- name: Parameter name should be required
|
||||
docker_config:
|
||||
name: db_password
|
||||
data: opensesame!
|
||||
template_driver: golang
|
||||
state: present
|
||||
register: output
|
||||
|
||||
- name: Assert config was updated
|
||||
assert:
|
||||
that:
|
||||
- output is changed
|
||||
|
||||
- name: Invalid template_driver
|
||||
docker_config:
|
||||
name: db_password
|
||||
data: opensesame!
|
||||
template_driver: "not a template driver"
|
||||
state: present
|
||||
ignore_errors: true
|
||||
register: output
|
||||
|
||||
- name: Assert failure when called with invalid template_driver
|
||||
- name: Assert failure when called with no name
|
||||
assert:
|
||||
that:
|
||||
- 'output is failed'
|
||||
- 'output.msg == "value of template_driver must be one of: golang, got: not a template driver"'
|
||||
- 'output is failed'
|
||||
- 'output.msg == "missing required arguments: name"'
|
||||
|
||||
- name: Test parameters
|
||||
docker_config:
|
||||
name: foo
|
||||
state: present
|
||||
ignore_errors: true
|
||||
register: output
|
||||
|
||||
- name: Assert failure when called with no data
|
||||
assert:
|
||||
that:
|
||||
- 'output is failed'
|
||||
- 'output.msg == "state is present but any of the following are missing: data, data_src"'
|
||||
|
||||
- name: Create config
|
||||
docker_config:
|
||||
name: db_password
|
||||
data: opensesame!
|
||||
state: present
|
||||
register: output
|
||||
|
||||
- name: Create variable config_id
|
||||
set_fact:
|
||||
config_id: "{{ output.config_id }}"
|
||||
|
||||
- name: Inspect config
|
||||
command: "docker config inspect {{ config_id }}"
|
||||
register: inspect
|
||||
ignore_errors: true
|
||||
|
||||
- debug:
|
||||
var: inspect
|
||||
|
||||
- name: Assert config creation succeeded
|
||||
assert:
|
||||
that:
|
||||
- "'db_password' in inspect.stdout"
|
||||
- "'ansible_key' in inspect.stdout"
|
||||
when: inspect is not failed
|
||||
- assert:
|
||||
that:
|
||||
- "'is too new. Maximum supported API version is' in inspect.stderr"
|
||||
when: inspect is failed
|
||||
|
||||
- name: Create config again
|
||||
docker_config:
|
||||
name: db_password
|
||||
data: opensesame!
|
||||
template_driver: golang
|
||||
state: present
|
||||
register: output
|
||||
|
||||
- name: Assert create config is idempotent
|
||||
assert:
|
||||
that:
|
||||
- output is not changed
|
||||
- output is not changed
|
||||
|
||||
# data is the docker swarm's name
|
||||
- name: Update config with template data
|
||||
- name: Write config into file
|
||||
copy:
|
||||
dest: "{{ remote_tmp_dir }}/data"
|
||||
content: |-
|
||||
opensesame!
|
||||
|
||||
- name: Create config again (from file)
|
||||
docker_config:
|
||||
name: db_password
|
||||
data: "{{ '{{' }} .Service.Name {{ '}}' }}"
|
||||
template_driver: golang
|
||||
data_src: "{{ remote_tmp_dir }}/data"
|
||||
state: present
|
||||
register: output
|
||||
|
||||
- name: Inspect config
|
||||
command: "docker config inspect {{ output.config_id }}"
|
||||
register: inspect
|
||||
|
||||
- name: Show inspection result
|
||||
debug:
|
||||
var: inspect
|
||||
|
||||
- name: Assert config creation succeeded
|
||||
- name: Assert create config is idempotent
|
||||
assert:
|
||||
that:
|
||||
- "'db_password' in inspect.stdout"
|
||||
- "'ansible_key' in inspect.stdout"
|
||||
# According to the API docs, 'Data' is "Base64-url-safe-encoded (RFC 4648) config data."
|
||||
- "'\"Data\": \"e3sgLlNlcnZpY2UuTmFtZSB9fQ==\"' in inspect.stdout"
|
||||
- "'Templating' in inspect.stdout"
|
||||
- "'\"Name\": \"golang\"' in inspect.stdout"
|
||||
- output is not changed
|
||||
|
||||
- name: Create config again (base64)
|
||||
docker_config:
|
||||
name: db_password
|
||||
data: b3BlbnNlc2FtZSE=
|
||||
data_is_b64: true
|
||||
state: present
|
||||
register: output
|
||||
|
||||
- name: Assert create config (base64) is idempotent
|
||||
assert:
|
||||
that:
|
||||
- output is not changed
|
||||
|
||||
- name: Update config
|
||||
docker_config:
|
||||
name: db_password
|
||||
data: newpassword!
|
||||
state: present
|
||||
register: output
|
||||
|
||||
- name: Assert config was updated
|
||||
assert:
|
||||
that:
|
||||
- output is changed
|
||||
- output.config_id != config_id
|
||||
|
||||
- name: Remove config
|
||||
docker_config:
|
||||
@ -318,7 +136,7 @@
|
||||
state: absent
|
||||
|
||||
- name: Check that config is removed
|
||||
command: "docker config inspect {{ output.config_id }}"
|
||||
command: "docker config inspect {{ config_id }}"
|
||||
register: output
|
||||
ignore_errors: true
|
||||
|
||||
@ -327,8 +145,190 @@
|
||||
that:
|
||||
- output is failed
|
||||
|
||||
- name: Remove config
|
||||
docker_config:
|
||||
name: db_password
|
||||
state: absent
|
||||
register: output
|
||||
|
||||
- name: Assert remove config is idempotent
|
||||
assert:
|
||||
that:
|
||||
- output is not changed
|
||||
|
||||
# Rolling update
|
||||
|
||||
- name: Create rolling config
|
||||
docker_config:
|
||||
name: rolling_password
|
||||
data: opensesame!
|
||||
rolling_versions: true
|
||||
state: present
|
||||
register: original_output
|
||||
|
||||
- name: Create variable config_id
|
||||
set_fact:
|
||||
config_id: "{{ original_output.config_id }}"
|
||||
|
||||
- name: Inspect config
|
||||
command: "docker config inspect {{ config_id }}"
|
||||
register: inspect
|
||||
ignore_errors: true
|
||||
|
||||
- debug:
|
||||
var: inspect
|
||||
|
||||
- name: Assert config creation succeeded
|
||||
assert:
|
||||
that:
|
||||
- "'rolling_password' in inspect.stdout"
|
||||
- "'ansible_key' in inspect.stdout"
|
||||
- "'ansible_version' in inspect.stdout"
|
||||
- original_output.config_name == 'rolling_password_v1'
|
||||
when: inspect is not failed
|
||||
- assert:
|
||||
that:
|
||||
- "'is too new. Maximum supported API version is' in inspect.stderr"
|
||||
when: inspect is failed
|
||||
|
||||
- name: Create config again
|
||||
docker_config:
|
||||
name: rolling_password
|
||||
data: newpassword!
|
||||
rolling_versions: true
|
||||
state: present
|
||||
register: new_output
|
||||
|
||||
- name: Assert that new version is created
|
||||
assert:
|
||||
that:
|
||||
- new_output is changed
|
||||
- new_output.config_id != original_output.config_id
|
||||
- new_output.config_name != original_output.config_name
|
||||
- new_output.config_name == 'rolling_password_v2'
|
||||
|
||||
- name: Remove rolling configs
|
||||
docker_config:
|
||||
name: rolling_password
|
||||
rolling_versions: true
|
||||
state: absent
|
||||
|
||||
- name: Check that config is removed
|
||||
command: "docker config inspect {{ original_output.config_id }}"
|
||||
register: output
|
||||
ignore_errors: true
|
||||
|
||||
- name: Assert config was removed
|
||||
assert:
|
||||
that:
|
||||
- output is failed
|
||||
|
||||
- name: Check that config is removed
|
||||
command: "docker config inspect {{ new_output.config_id }}"
|
||||
register: output
|
||||
ignore_errors: true
|
||||
|
||||
- name: Assert config was removed
|
||||
assert:
|
||||
that:
|
||||
- output is failed
|
||||
|
||||
# template_driver tests
|
||||
|
||||
- when: docker_py_version is version('5.0.3', '>=') and docker_api_version is version('1.37', '>=')
|
||||
block:
|
||||
|
||||
- name: Create regular config
|
||||
docker_config:
|
||||
name: db_password
|
||||
data: opensesame!
|
||||
state: present
|
||||
|
||||
- name: Update config with template_driver
|
||||
docker_config:
|
||||
name: db_password
|
||||
data: opensesame!
|
||||
template_driver: golang
|
||||
state: present
|
||||
register: output
|
||||
|
||||
- name: Assert config was updated
|
||||
assert:
|
||||
that:
|
||||
- output is changed
|
||||
|
||||
- name: Invalid template_driver
|
||||
docker_config:
|
||||
name: db_password
|
||||
data: opensesame!
|
||||
template_driver: "not a template driver"
|
||||
state: present
|
||||
ignore_errors: true
|
||||
register: output
|
||||
|
||||
- name: Assert failure when called with invalid template_driver
|
||||
assert:
|
||||
that:
|
||||
- 'output is failed'
|
||||
- 'output.msg == "value of template_driver must be one of: golang, got: not a template driver"'
|
||||
|
||||
- name: Create config again
|
||||
docker_config:
|
||||
name: db_password
|
||||
data: opensesame!
|
||||
template_driver: golang
|
||||
state: present
|
||||
register: output
|
||||
|
||||
- name: Assert create config is idempotent
|
||||
assert:
|
||||
that:
|
||||
- output is not changed
|
||||
|
||||
# data is the docker swarm's name
|
||||
- name: Update config with template data
|
||||
docker_config:
|
||||
name: db_password
|
||||
data: "{{ '{{' }} .Service.Name {{ '}}' }}"
|
||||
template_driver: golang
|
||||
state: present
|
||||
register: output
|
||||
|
||||
- name: Inspect config
|
||||
command: "docker config inspect {{ output.config_id }}"
|
||||
register: inspect
|
||||
|
||||
- name: Show inspection result
|
||||
debug:
|
||||
var: inspect
|
||||
|
||||
- name: Assert config creation succeeded
|
||||
assert:
|
||||
that:
|
||||
- "'db_password' in inspect.stdout"
|
||||
- "'ansible_key' in inspect.stdout"
|
||||
# According to the API docs, 'Data' is "Base64-url-safe-encoded (RFC 4648) config data."
|
||||
- "'\"Data\": \"e3sgLlNlcnZpY2UuTmFtZSB9fQ==\"' in inspect.stdout"
|
||||
- "'Templating' in inspect.stdout"
|
||||
- "'\"Name\": \"golang\"' in inspect.stdout"
|
||||
|
||||
- name: Remove config
|
||||
docker_config:
|
||||
name: db_password
|
||||
state: absent
|
||||
|
||||
- name: Check that config is removed
|
||||
command: "docker config inspect {{ output.config_id }}"
|
||||
register: output
|
||||
ignore_errors: true
|
||||
|
||||
- name: Assert config was removed
|
||||
assert:
|
||||
that:
|
||||
- output is failed
|
||||
|
||||
always:
|
||||
- name: Remove a Swarm cluster
|
||||
docker_swarm:
|
||||
state: absent
|
||||
force: true
|
||||
- name: Remove a Swarm cluster
|
||||
docker_swarm:
|
||||
state: absent
|
||||
force: true
|
||||
|
||||
@ -56,9 +56,9 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- value_1 is changed
|
||||
- value_2 is not changed
|
||||
- value_3 is changed
|
||||
- value_1 is changed
|
||||
- value_2 is not changed
|
||||
- value_3 is changed
|
||||
|
||||
####################################################################
|
||||
## list ############################################################
|
||||
@ -71,8 +71,8 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
dns_servers:
|
||||
- 1.1.1.1
|
||||
- 8.8.8.8
|
||||
- 1.1.1.1
|
||||
- 8.8.8.8
|
||||
register: list_1
|
||||
|
||||
- name: list (change, ignore)
|
||||
@ -82,7 +82,7 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
dns_servers:
|
||||
- 9.9.9.9
|
||||
- 9.9.9.9
|
||||
force_kill: true
|
||||
comparisons:
|
||||
dns_servers: ignore
|
||||
@ -95,7 +95,7 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
dns_servers:
|
||||
- 9.9.9.9
|
||||
- 9.9.9.9
|
||||
force_kill: true
|
||||
comparisons:
|
||||
dns_servers: strict
|
||||
@ -110,9 +110,9 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- list_1 is changed
|
||||
- list_2 is not changed
|
||||
- list_3 is changed
|
||||
- list_1 is changed
|
||||
- list_2 is not changed
|
||||
- list_3 is changed
|
||||
|
||||
####################################################################
|
||||
## set #############################################################
|
||||
@ -125,8 +125,8 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
groups:
|
||||
- "1010"
|
||||
- "1011"
|
||||
- "1010"
|
||||
- "1011"
|
||||
register: set_1
|
||||
|
||||
- name: set (change, ignore)
|
||||
@ -136,9 +136,9 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
groups:
|
||||
- "1010"
|
||||
- "1011"
|
||||
- "1012"
|
||||
- "1010"
|
||||
- "1011"
|
||||
- "1012"
|
||||
force_kill: true
|
||||
comparisons:
|
||||
groups: ignore
|
||||
@ -151,9 +151,9 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
groups:
|
||||
- "1010"
|
||||
- "1011"
|
||||
- "1012"
|
||||
- "1010"
|
||||
- "1011"
|
||||
- "1012"
|
||||
force_kill: true
|
||||
comparisons:
|
||||
groups: allow_more_present
|
||||
@ -166,8 +166,8 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
groups:
|
||||
- "1010"
|
||||
- "1012"
|
||||
- "1010"
|
||||
- "1012"
|
||||
force_kill: true
|
||||
comparisons:
|
||||
groups: allow_more_present
|
||||
@ -180,8 +180,8 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
groups:
|
||||
- "1010"
|
||||
- "1012"
|
||||
- "1010"
|
||||
- "1012"
|
||||
force_kill: true
|
||||
comparisons:
|
||||
groups: strict
|
||||
@ -196,11 +196,11 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- set_1 is changed
|
||||
- set_2 is not changed
|
||||
- set_3 is changed
|
||||
- set_4 is not changed
|
||||
- set_5 is changed
|
||||
- set_1 is changed
|
||||
- set_2 is not changed
|
||||
- set_3 is changed
|
||||
- set_4 is not changed
|
||||
- set_5 is changed
|
||||
|
||||
####################################################################
|
||||
## set(dict) #######################################################
|
||||
@ -213,8 +213,8 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
devices:
|
||||
- "/dev/random:/dev/virt-random:rwm"
|
||||
- "/dev/urandom:/dev/virt-urandom:rwm"
|
||||
- "/dev/random:/dev/virt-random:rwm"
|
||||
- "/dev/urandom:/dev/virt-urandom:rwm"
|
||||
register: set_dict_1
|
||||
|
||||
- name: set(dict) (change, ignore)
|
||||
@ -224,9 +224,9 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
devices:
|
||||
- "/dev/random:/dev/virt-random:rwm"
|
||||
- "/dev/urandom:/dev/virt-urandom:rwm"
|
||||
- "/dev/null:/dev/virt-null:rwm"
|
||||
- "/dev/random:/dev/virt-random:rwm"
|
||||
- "/dev/urandom:/dev/virt-urandom:rwm"
|
||||
- "/dev/null:/dev/virt-null:rwm"
|
||||
force_kill: true
|
||||
comparisons:
|
||||
devices: ignore
|
||||
@ -239,9 +239,9 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
devices:
|
||||
- "/dev/random:/dev/virt-random:rwm"
|
||||
- "/dev/urandom:/dev/virt-urandom:rwm"
|
||||
- "/dev/null:/dev/virt-null:rwm"
|
||||
- "/dev/random:/dev/virt-random:rwm"
|
||||
- "/dev/urandom:/dev/virt-urandom:rwm"
|
||||
- "/dev/null:/dev/virt-null:rwm"
|
||||
force_kill: true
|
||||
comparisons:
|
||||
devices: allow_more_present
|
||||
@ -254,8 +254,8 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
devices:
|
||||
- "/dev/random:/dev/virt-random:rwm"
|
||||
- "/dev/null:/dev/virt-null:rwm"
|
||||
- "/dev/random:/dev/virt-random:rwm"
|
||||
- "/dev/null:/dev/virt-null:rwm"
|
||||
force_kill: true
|
||||
comparisons:
|
||||
devices: allow_more_present
|
||||
@ -268,8 +268,8 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
devices:
|
||||
- "/dev/random:/dev/virt-random:rwm"
|
||||
- "/dev/null:/dev/virt-null:rwm"
|
||||
- "/dev/random:/dev/virt-random:rwm"
|
||||
- "/dev/null:/dev/virt-null:rwm"
|
||||
force_kill: true
|
||||
comparisons:
|
||||
devices: strict
|
||||
@ -284,11 +284,11 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- set_dict_1 is changed
|
||||
- set_dict_2 is not changed
|
||||
- set_dict_3 is changed
|
||||
- set_dict_4 is not changed
|
||||
- set_dict_5 is changed
|
||||
- set_dict_1 is changed
|
||||
- set_dict_2 is not changed
|
||||
- set_dict_3 is changed
|
||||
- set_dict_4 is not changed
|
||||
- set_dict_5 is changed
|
||||
|
||||
####################################################################
|
||||
## dict ############################################################
|
||||
@ -372,11 +372,11 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- dict_1 is changed
|
||||
- dict_2 is not changed
|
||||
- dict_3 is changed
|
||||
- dict_4 is not changed
|
||||
- dict_5 is changed
|
||||
- dict_1 is changed
|
||||
- dict_2 is not changed
|
||||
- dict_3 is changed
|
||||
- dict_4 is not changed
|
||||
- dict_5 is changed
|
||||
|
||||
####################################################################
|
||||
## wildcard ########################################################
|
||||
@ -460,7 +460,7 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- wildcard_1 is changed
|
||||
- wildcard_2 is not changed
|
||||
- wildcard_3 is changed
|
||||
- wildcard_4 is not changed
|
||||
- wildcard_1 is changed
|
||||
- wildcard_2 is not changed
|
||||
- wildcard_3 is changed
|
||||
- wildcard_4 is not changed
|
||||
|
||||
@ -60,10 +60,10 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- start_1 is changed
|
||||
- start_2 is changed
|
||||
- start_3 is not changed
|
||||
- start_4 is not changed
|
||||
- start_1 is changed
|
||||
- start_2 is changed
|
||||
- start_3 is not changed
|
||||
- start_4 is not changed
|
||||
|
||||
####################################################################
|
||||
## container_default_behavior: no_defaults #########################
|
||||
@ -116,7 +116,7 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- start_1 is changed
|
||||
- start_2 is changed
|
||||
- start_3 is not changed
|
||||
- start_4 is not changed
|
||||
- start_1 is changed
|
||||
- start_2 is changed
|
||||
- start_3 is not changed
|
||||
- start_4 is not changed
|
||||
|
||||
@ -22,8 +22,8 @@
|
||||
- name: Get image ID of {{ docker_test_image_hello_world }} and {{ docker_test_image_alpine }} images
|
||||
docker_image_info:
|
||||
name:
|
||||
- "{{ docker_test_image_hello_world }}"
|
||||
- "{{ docker_test_image_alpine }}"
|
||||
- "{{ docker_test_image_hello_world }}"
|
||||
- "{{ docker_test_image_alpine }}"
|
||||
register: image_info
|
||||
|
||||
- assert:
|
||||
|
||||
@ -29,13 +29,13 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
mounts:
|
||||
- source: /tmp
|
||||
target: /tmp
|
||||
type: bind
|
||||
- source: /
|
||||
target: /whatever
|
||||
type: bind
|
||||
read_only: false
|
||||
- source: /tmp
|
||||
target: /tmp
|
||||
type: bind
|
||||
- source: /
|
||||
target: /whatever
|
||||
type: bind
|
||||
read_only: false
|
||||
register: mounts_1
|
||||
|
||||
- name: mounts (idempotency)
|
||||
@ -45,13 +45,13 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
mounts:
|
||||
- source: /
|
||||
target: /whatever
|
||||
type: bind
|
||||
read_only: false
|
||||
- source: /tmp
|
||||
target: /tmp
|
||||
type: bind
|
||||
- source: /
|
||||
target: /whatever
|
||||
type: bind
|
||||
read_only: false
|
||||
- source: /tmp
|
||||
target: /tmp
|
||||
type: bind
|
||||
register: mounts_2
|
||||
|
||||
- name: mounts (less mounts)
|
||||
@ -61,9 +61,9 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
mounts:
|
||||
- source: /tmp
|
||||
target: /tmp
|
||||
type: bind
|
||||
- source: /tmp
|
||||
target: /tmp
|
||||
type: bind
|
||||
register: mounts_3
|
||||
|
||||
- name: mounts (more mounts)
|
||||
@ -73,13 +73,13 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
mounts:
|
||||
- source: /tmp
|
||||
target: /tmp
|
||||
type: bind
|
||||
- source: /tmp
|
||||
target: /somewhereelse
|
||||
type: bind
|
||||
read_only: true
|
||||
- source: /tmp
|
||||
target: /tmp
|
||||
type: bind
|
||||
- source: /tmp
|
||||
target: /somewhereelse
|
||||
type: bind
|
||||
read_only: true
|
||||
force_kill: true
|
||||
register: mounts_4
|
||||
|
||||
@ -90,13 +90,13 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
mounts:
|
||||
- source: /tmp
|
||||
target: /tmp
|
||||
type: bind
|
||||
- source: /tmp
|
||||
target: /somewhereelse
|
||||
type: bind
|
||||
read_only: false
|
||||
- source: /tmp
|
||||
target: /tmp
|
||||
type: bind
|
||||
- source: /tmp
|
||||
target: /somewhereelse
|
||||
type: bind
|
||||
read_only: false
|
||||
force_kill: true
|
||||
register: mounts_5
|
||||
|
||||
@ -107,13 +107,13 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
mounts:
|
||||
- source: /home
|
||||
target: /x
|
||||
type: bind
|
||||
- source: /etc
|
||||
target: /x
|
||||
type: bind
|
||||
read_only: false
|
||||
- source: /home
|
||||
target: /x
|
||||
type: bind
|
||||
- source: /etc
|
||||
target: /x
|
||||
type: bind
|
||||
read_only: false
|
||||
force_kill: true
|
||||
register: mounts_6
|
||||
ignore_errors: true
|
||||
@ -151,15 +151,15 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- mounts_1 is changed
|
||||
- mounts_2 is not changed
|
||||
- mounts_3 is not changed
|
||||
- mounts_4 is changed
|
||||
- mounts_5 is changed
|
||||
- mounts_6 is failed
|
||||
- "'The mount point \"/x\" appears twice in the mounts option' == mounts_6.msg"
|
||||
- mounts_7 is changed
|
||||
- mounts_8 is not changed
|
||||
- mounts_1 is changed
|
||||
- mounts_2 is not changed
|
||||
- mounts_3 is not changed
|
||||
- mounts_4 is changed
|
||||
- mounts_5 is changed
|
||||
- mounts_6 is failed
|
||||
- "'The mount point \"/x\" appears twice in the mounts option' == mounts_6.msg"
|
||||
- mounts_7 is changed
|
||||
- mounts_8 is not changed
|
||||
|
||||
####################################################################
|
||||
## tmpfs ###########################################################
|
||||
@ -172,14 +172,14 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
mounts:
|
||||
- target: /cache1
|
||||
type: tmpfs
|
||||
tmpfs_mode: "1777"
|
||||
tmpfs_size: "1GB"
|
||||
- target: /cache2
|
||||
type: tmpfs
|
||||
tmpfs_mode: "1777"
|
||||
tmpfs_size: "1GB"
|
||||
- target: /cache1
|
||||
type: tmpfs
|
||||
tmpfs_mode: "1777"
|
||||
tmpfs_size: "1GB"
|
||||
- target: /cache2
|
||||
type: tmpfs
|
||||
tmpfs_mode: "1777"
|
||||
tmpfs_size: "1GB"
|
||||
force_kill: true
|
||||
register: tmpfs_1
|
||||
|
||||
@ -190,14 +190,14 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
mounts:
|
||||
- target: /cache2
|
||||
type: tmpfs
|
||||
tmpfs_mode: "1777"
|
||||
tmpfs_size: "1GB"
|
||||
- target: /cache1
|
||||
type: tmpfs
|
||||
tmpfs_mode: "1777"
|
||||
tmpfs_size: "1GB"
|
||||
- target: /cache2
|
||||
type: tmpfs
|
||||
tmpfs_mode: "1777"
|
||||
tmpfs_size: "1GB"
|
||||
- target: /cache1
|
||||
type: tmpfs
|
||||
tmpfs_mode: "1777"
|
||||
tmpfs_size: "1GB"
|
||||
force_kill: true
|
||||
register: tmpfs_2
|
||||
|
||||
@ -208,18 +208,18 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
mounts:
|
||||
- target: /cache1
|
||||
type: tmpfs
|
||||
tmpfs_mode: "1777"
|
||||
tmpfs_size: "1GB"
|
||||
- target: /cache2
|
||||
type: tmpfs
|
||||
tmpfs_mode: "1777"
|
||||
tmpfs_size: "1GB"
|
||||
- target: /cache3
|
||||
type: tmpfs
|
||||
tmpfs_mode: "1777"
|
||||
tmpfs_size: "1GB"
|
||||
- target: /cache1
|
||||
type: tmpfs
|
||||
tmpfs_mode: "1777"
|
||||
tmpfs_size: "1GB"
|
||||
- target: /cache2
|
||||
type: tmpfs
|
||||
tmpfs_mode: "1777"
|
||||
tmpfs_size: "1GB"
|
||||
- target: /cache3
|
||||
type: tmpfs
|
||||
tmpfs_mode: "1777"
|
||||
tmpfs_size: "1GB"
|
||||
force_kill: true
|
||||
register: tmpfs_3
|
||||
|
||||
@ -230,10 +230,10 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
mounts:
|
||||
- target: /cache1
|
||||
type: tmpfs
|
||||
tmpfs_mode: "1700"
|
||||
tmpfs_size: "1GB"
|
||||
- target: /cache1
|
||||
type: tmpfs
|
||||
tmpfs_mode: "1700"
|
||||
tmpfs_size: "1GB"
|
||||
force_kill: true
|
||||
register: tmpfs_4
|
||||
|
||||
@ -244,10 +244,10 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
mounts:
|
||||
- target: /cache1
|
||||
type: tmpfs
|
||||
tmpfs_mode: "1700"
|
||||
tmpfs_size: "2GB"
|
||||
- target: /cache1
|
||||
type: tmpfs
|
||||
tmpfs_mode: "1700"
|
||||
tmpfs_size: "2GB"
|
||||
force_kill: true
|
||||
register: tmpfs_5
|
||||
|
||||
@ -260,11 +260,11 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- tmpfs_1 is changed
|
||||
- tmpfs_2 is not changed
|
||||
- tmpfs_3 is changed
|
||||
- tmpfs_4 is changed
|
||||
- tmpfs_5 is changed
|
||||
- tmpfs_1 is changed
|
||||
- tmpfs_2 is not changed
|
||||
- tmpfs_3 is changed
|
||||
- tmpfs_4 is changed
|
||||
- tmpfs_5 is changed
|
||||
|
||||
####################################################################
|
||||
## mounts + volumes ################################################
|
||||
@ -277,12 +277,12 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
mounts:
|
||||
- source: /
|
||||
target: /whatever
|
||||
type: bind
|
||||
read_only: true
|
||||
- source: /
|
||||
target: /whatever
|
||||
type: bind
|
||||
read_only: true
|
||||
volumes:
|
||||
- /tmp:/tmp
|
||||
- /tmp:/tmp
|
||||
register: mounts_volumes_1
|
||||
|
||||
- name: mounts + volumes (idempotency)
|
||||
@ -292,12 +292,12 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
mounts:
|
||||
- source: /
|
||||
target: /whatever
|
||||
type: bind
|
||||
read_only: true
|
||||
- source: /
|
||||
target: /whatever
|
||||
type: bind
|
||||
read_only: true
|
||||
volumes:
|
||||
- /tmp:/tmp
|
||||
- /tmp:/tmp
|
||||
register: mounts_volumes_2
|
||||
|
||||
- name: mounts + volumes (switching)
|
||||
@ -307,12 +307,12 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
mounts:
|
||||
- source: /tmp
|
||||
target: /tmp
|
||||
type: bind
|
||||
read_only: false
|
||||
- source: /tmp
|
||||
target: /tmp
|
||||
type: bind
|
||||
read_only: false
|
||||
volumes:
|
||||
- /:/whatever:ro
|
||||
- /:/whatever:ro
|
||||
force_kill: true
|
||||
register: mounts_volumes_3
|
||||
|
||||
@ -323,12 +323,12 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
mounts:
|
||||
- source: /tmp
|
||||
target: /tmp
|
||||
type: bind
|
||||
read_only: false
|
||||
- source: /tmp
|
||||
target: /tmp
|
||||
type: bind
|
||||
read_only: false
|
||||
volumes:
|
||||
- /tmp:/tmp
|
||||
- /tmp:/tmp
|
||||
force_kill: true
|
||||
register: mounts_volumes_4
|
||||
ignore_errors: true
|
||||
@ -342,11 +342,11 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- mounts_volumes_1 is changed
|
||||
- mounts_volumes_2 is not changed
|
||||
- mounts_volumes_3 is changed
|
||||
- mounts_volumes_4 is failed
|
||||
- "'The mount point \"/tmp\" appears both in the volumes and mounts option' in mounts_volumes_4.msg"
|
||||
- mounts_volumes_1 is changed
|
||||
- mounts_volumes_2 is not changed
|
||||
- mounts_volumes_3 is changed
|
||||
- mounts_volumes_4 is failed
|
||||
- "'The mount point \"/tmp\" appears both in the volumes and mounts option' in mounts_volumes_4.msg"
|
||||
|
||||
####################################################################
|
||||
## volume_driver ###################################################
|
||||
@ -389,9 +389,9 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- volume_driver_1 is changed
|
||||
- volume_driver_2 is not changed
|
||||
- volume_driver_3 is changed
|
||||
- volume_driver_1 is changed
|
||||
- volume_driver_2 is not changed
|
||||
- volume_driver_3 is changed
|
||||
|
||||
####################################################################
|
||||
## volumes #########################################################
|
||||
@ -404,9 +404,9 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
volumes:
|
||||
- "/tmp:/tmp"
|
||||
- "/:/whatever:rw,z"
|
||||
- "/anon:rw"
|
||||
- "/tmp:/tmp"
|
||||
- "/:/whatever:rw,z"
|
||||
- "/anon:rw"
|
||||
register: volumes_1
|
||||
|
||||
- name: volumes (idempotency)
|
||||
@ -416,9 +416,9 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
volumes:
|
||||
- "/:/whatever:rw,z"
|
||||
- "/tmp:/tmp"
|
||||
- "/anon:rw"
|
||||
- "/:/whatever:rw,z"
|
||||
- "/tmp:/tmp"
|
||||
- "/anon:rw"
|
||||
register: volumes_2
|
||||
|
||||
- name: volumes (less volumes)
|
||||
@ -428,7 +428,7 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
volumes:
|
||||
- "/tmp:/tmp"
|
||||
- "/tmp:/tmp"
|
||||
register: volumes_3
|
||||
|
||||
- name: volumes (more volumes)
|
||||
@ -438,8 +438,8 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
volumes:
|
||||
- "/tmp:/tmp"
|
||||
- "/tmp:/somewhereelse:ro,Z"
|
||||
- "/tmp:/tmp"
|
||||
- "/tmp:/somewhereelse:ro,Z"
|
||||
force_kill: true
|
||||
register: volumes_4
|
||||
|
||||
@ -450,8 +450,8 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
volumes:
|
||||
- "/tmp:/tmp"
|
||||
- "/tmp:/somewhereelse:ro"
|
||||
- "/tmp:/tmp"
|
||||
- "/tmp:/somewhereelse:ro"
|
||||
force_kill: true
|
||||
register: volumes_5
|
||||
|
||||
@ -462,8 +462,8 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
volumes:
|
||||
- "/etc:/tmp"
|
||||
- "/home:/tmp:ro"
|
||||
- "/etc:/tmp"
|
||||
- "/home:/tmp:ro"
|
||||
force_kill: true
|
||||
register: volumes_6
|
||||
ignore_errors: true
|
||||
@ -477,16 +477,16 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- volumes_1 is changed
|
||||
- volumes_1.container.Config.Volumes | length == 1
|
||||
- volumes_1.container.Config.Volumes['/anon:rw'] | length == 0
|
||||
- volumes_2 is not changed
|
||||
- volumes_3 is not changed
|
||||
- volumes_4 is changed
|
||||
- not volumes_4.container.Config.Volumes
|
||||
- volumes_5 is changed
|
||||
- volumes_6 is failed
|
||||
- "'The mount point \"/tmp\" appears twice in the volumes option' in volumes_6.msg"
|
||||
- volumes_1 is changed
|
||||
- volumes_1.container.Config.Volumes | length == 1
|
||||
- volumes_1.container.Config.Volumes['/anon:rw'] | length == 0
|
||||
- volumes_2 is not changed
|
||||
- volumes_3 is not changed
|
||||
- volumes_4 is changed
|
||||
- not volumes_4.container.Config.Volumes
|
||||
- volumes_5 is changed
|
||||
- volumes_6 is failed
|
||||
- "'The mount point \"/tmp\" appears twice in the volumes option' in volumes_6.msg"
|
||||
|
||||
####################################################################
|
||||
## volumes_from ####################################################
|
||||
@ -499,10 +499,10 @@
|
||||
name: "{{ container_name }}"
|
||||
state: started
|
||||
volumes:
|
||||
- "{{ '/tmp:/tmp' if container_name == cname_h1 else '/:/whatever:ro' }}"
|
||||
- "{{ '/tmp:/tmp' if container_name == cname_h1 else '/:/whatever:ro' }}"
|
||||
loop:
|
||||
- "{{ cname_h1 }}"
|
||||
- "{{ cname_h2 }}"
|
||||
- "{{ cname_h1 }}"
|
||||
- "{{ cname_h2 }}"
|
||||
loop_control:
|
||||
loop_var: container_name
|
||||
|
||||
@ -540,18 +540,18 @@
|
||||
state: absent
|
||||
force_kill: true
|
||||
loop:
|
||||
- "{{ cname }}"
|
||||
- "{{ cname_h1 }}"
|
||||
- "{{ cname_h2 }}"
|
||||
- "{{ cname }}"
|
||||
- "{{ cname_h1 }}"
|
||||
- "{{ cname_h2 }}"
|
||||
loop_control:
|
||||
loop_var: container_name
|
||||
diff: false
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- volumes_from_1 is changed
|
||||
- volumes_from_2 is not changed
|
||||
- volumes_from_3 is changed
|
||||
- volumes_from_1 is changed
|
||||
- volumes_from_2 is not changed
|
||||
- volumes_from_3 is changed
|
||||
|
||||
####################################################################
|
||||
####################################################################
|
||||
|
||||
@ -20,8 +20,8 @@
|
||||
name: "{{ network_name }}"
|
||||
state: present
|
||||
loop:
|
||||
- "{{ nname_1 }}"
|
||||
- "{{ nname_2 }}"
|
||||
- "{{ nname_1 }}"
|
||||
- "{{ nname_2 }}"
|
||||
loop_control:
|
||||
loop_var: network_name
|
||||
|
||||
@ -126,24 +126,24 @@
|
||||
state: absent
|
||||
force_kill: true
|
||||
loop:
|
||||
- "{{ cname }}"
|
||||
- "{{ cname_h1 }}"
|
||||
- "{{ cname }}"
|
||||
- "{{ cname_h1 }}"
|
||||
loop_control:
|
||||
loop_var: container_name
|
||||
diff: false
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- network_mode_1 is changed
|
||||
- network_mode_1.container.HostConfig.NetworkMode == 'host'
|
||||
- network_mode_2 is not changed
|
||||
- network_mode_2.container.HostConfig.NetworkMode == 'host'
|
||||
- network_mode_3 is changed
|
||||
- network_mode_3.container.HostConfig.NetworkMode == 'none'
|
||||
- network_mode_4 is changed
|
||||
- network_mode_4.container.HostConfig.NetworkMode == ('container:' ~ cname_h1_id.container.Id)
|
||||
- network_mode_5 is not changed
|
||||
- network_mode_5.container.HostConfig.NetworkMode == ('container:' ~ cname_h1_id.container.Id)
|
||||
- network_mode_1 is changed
|
||||
- network_mode_1.container.HostConfig.NetworkMode == 'host'
|
||||
- network_mode_2 is not changed
|
||||
- network_mode_2.container.HostConfig.NetworkMode == 'host'
|
||||
- network_mode_3 is changed
|
||||
- network_mode_3.container.HostConfig.NetworkMode == 'none'
|
||||
- network_mode_4 is changed
|
||||
- network_mode_4.container.HostConfig.NetworkMode == ('container:' ~ cname_h1_id.container.Id)
|
||||
- network_mode_5 is not changed
|
||||
- network_mode_5.container.HostConfig.NetworkMode == ('container:' ~ cname_h1_id.container.Id)
|
||||
|
||||
####################################################################
|
||||
## networks, purge_networks for networks_cli_compatible=no #########
|
||||
@ -156,8 +156,8 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
networks:
|
||||
- name: "{{ nname_1 }}"
|
||||
- name: "{{ nname_2 }}"
|
||||
- name: "{{ nname_1 }}"
|
||||
- name: "{{ nname_2 }}"
|
||||
networks_cli_compatible: false
|
||||
register: networks_1
|
||||
|
||||
@ -168,8 +168,8 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
networks:
|
||||
- name: "{{ nname_1 }}"
|
||||
- name: "{{ nname_2 }}"
|
||||
- name: "{{ nname_1 }}"
|
||||
- name: "{{ nname_2 }}"
|
||||
networks_cli_compatible: false
|
||||
register: networks_2
|
||||
|
||||
@ -182,8 +182,8 @@
|
||||
comparisons:
|
||||
networks: strict
|
||||
networks:
|
||||
- name: bridge
|
||||
- name: "{{ nname_1 }}"
|
||||
- name: bridge
|
||||
- name: "{{ nname_1 }}"
|
||||
networks_cli_compatible: false
|
||||
force_kill: true
|
||||
register: networks_3
|
||||
@ -197,8 +197,8 @@
|
||||
comparisons:
|
||||
networks: strict
|
||||
networks:
|
||||
- name: "{{ nname_1 }}"
|
||||
- name: bridge
|
||||
- name: "{{ nname_1 }}"
|
||||
- name: bridge
|
||||
networks_cli_compatible: false
|
||||
register: networks_4
|
||||
|
||||
@ -209,7 +209,7 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
networks:
|
||||
- name: bridge
|
||||
- name: bridge
|
||||
networks_cli_compatible: false
|
||||
register: networks_5
|
||||
|
||||
@ -222,7 +222,7 @@
|
||||
comparisons:
|
||||
networks: strict
|
||||
networks:
|
||||
- name: bridge
|
||||
- name: bridge
|
||||
networks_cli_compatible: false
|
||||
force_kill: true
|
||||
register: networks_6
|
||||
@ -236,8 +236,8 @@
|
||||
comparisons:
|
||||
networks: strict
|
||||
networks:
|
||||
- name: bridge
|
||||
- name: "{{ nname_2 }}"
|
||||
- name: bridge
|
||||
- name: "{{ nname_2 }}"
|
||||
networks_cli_compatible: false
|
||||
force_kill: true
|
||||
register: networks_7
|
||||
@ -251,42 +251,42 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
# networks_1 has networks default, 'bridge', nname_1
|
||||
- networks_1 is changed
|
||||
- networks_1.container.NetworkSettings.Networks | length == 3
|
||||
- nname_1 in networks_1.container.NetworkSettings.Networks
|
||||
- nname_2 in networks_1.container.NetworkSettings.Networks
|
||||
- "'default' in networks_1.container.NetworkSettings.Networks or 'bridge' in networks_1.container.NetworkSettings.Networks"
|
||||
# networks_2 has networks default, 'bridge', nname_1
|
||||
- networks_2 is not changed
|
||||
- networks_2.container.NetworkSettings.Networks | length == 3
|
||||
- nname_1 in networks_2.container.NetworkSettings.Networks
|
||||
- nname_2 in networks_1.container.NetworkSettings.Networks
|
||||
- "'default' in networks_1.container.NetworkSettings.Networks or 'bridge' in networks_1.container.NetworkSettings.Networks"
|
||||
# networks_3 has networks 'bridge', nname_1
|
||||
- networks_3 is changed
|
||||
- networks_3.container.NetworkSettings.Networks | length == 2
|
||||
- nname_1 in networks_3.container.NetworkSettings.Networks
|
||||
- "'default' in networks_3.container.NetworkSettings.Networks or 'bridge' in networks_3.container.NetworkSettings.Networks"
|
||||
# networks_4 has networks 'bridge', nname_1
|
||||
- networks_4 is not changed
|
||||
- networks_4.container.NetworkSettings.Networks | length == 2
|
||||
- nname_1 in networks_4.container.NetworkSettings.Networks
|
||||
- "'default' in networks_4.container.NetworkSettings.Networks or 'bridge' in networks_4.container.NetworkSettings.Networks"
|
||||
# networks_5 has networks 'bridge', nname_1
|
||||
- networks_5 is not changed
|
||||
- networks_5.container.NetworkSettings.Networks | length == 2
|
||||
- nname_1 in networks_5.container.NetworkSettings.Networks
|
||||
- "'default' in networks_5.container.NetworkSettings.Networks or 'bridge' in networks_5.container.NetworkSettings.Networks"
|
||||
# networks_6 has networks 'bridge'
|
||||
- networks_6 is changed
|
||||
- networks_6.container.NetworkSettings.Networks | length == 1
|
||||
- "'default' in networks_6.container.NetworkSettings.Networks or 'bridge' in networks_6.container.NetworkSettings.Networks"
|
||||
# networks_7 has networks 'bridge', nname_2
|
||||
- networks_7 is changed
|
||||
- networks_7.container.NetworkSettings.Networks | length == 2
|
||||
- nname_2 in networks_7.container.NetworkSettings.Networks
|
||||
- "'default' in networks_7.container.NetworkSettings.Networks or 'bridge' in networks_7.container.NetworkSettings.Networks"
|
||||
# networks_1 has networks default, 'bridge', nname_1
|
||||
- networks_1 is changed
|
||||
- networks_1.container.NetworkSettings.Networks | length == 3
|
||||
- nname_1 in networks_1.container.NetworkSettings.Networks
|
||||
- nname_2 in networks_1.container.NetworkSettings.Networks
|
||||
- "'default' in networks_1.container.NetworkSettings.Networks or 'bridge' in networks_1.container.NetworkSettings.Networks"
|
||||
# networks_2 has networks default, 'bridge', nname_1
|
||||
- networks_2 is not changed
|
||||
- networks_2.container.NetworkSettings.Networks | length == 3
|
||||
- nname_1 in networks_2.container.NetworkSettings.Networks
|
||||
- nname_2 in networks_1.container.NetworkSettings.Networks
|
||||
- "'default' in networks_1.container.NetworkSettings.Networks or 'bridge' in networks_1.container.NetworkSettings.Networks"
|
||||
# networks_3 has networks 'bridge', nname_1
|
||||
- networks_3 is changed
|
||||
- networks_3.container.NetworkSettings.Networks | length == 2
|
||||
- nname_1 in networks_3.container.NetworkSettings.Networks
|
||||
- "'default' in networks_3.container.NetworkSettings.Networks or 'bridge' in networks_3.container.NetworkSettings.Networks"
|
||||
# networks_4 has networks 'bridge', nname_1
|
||||
- networks_4 is not changed
|
||||
- networks_4.container.NetworkSettings.Networks | length == 2
|
||||
- nname_1 in networks_4.container.NetworkSettings.Networks
|
||||
- "'default' in networks_4.container.NetworkSettings.Networks or 'bridge' in networks_4.container.NetworkSettings.Networks"
|
||||
# networks_5 has networks 'bridge', nname_1
|
||||
- networks_5 is not changed
|
||||
- networks_5.container.NetworkSettings.Networks | length == 2
|
||||
- nname_1 in networks_5.container.NetworkSettings.Networks
|
||||
- "'default' in networks_5.container.NetworkSettings.Networks or 'bridge' in networks_5.container.NetworkSettings.Networks"
|
||||
# networks_6 has networks 'bridge'
|
||||
- networks_6 is changed
|
||||
- networks_6.container.NetworkSettings.Networks | length == 1
|
||||
- "'default' in networks_6.container.NetworkSettings.Networks or 'bridge' in networks_6.container.NetworkSettings.Networks"
|
||||
# networks_7 has networks 'bridge', nname_2
|
||||
- networks_7 is changed
|
||||
- networks_7.container.NetworkSettings.Networks | length == 2
|
||||
- nname_2 in networks_7.container.NetworkSettings.Networks
|
||||
- "'default' in networks_7.container.NetworkSettings.Networks or 'bridge' in networks_7.container.NetworkSettings.Networks"
|
||||
|
||||
####################################################################
|
||||
## networks for networks_cli_compatible=yes ########################
|
||||
@ -299,11 +299,11 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
networks:
|
||||
- name: "{{ nname_1 }}"
|
||||
aliases:
|
||||
- alias1
|
||||
- alias2
|
||||
- name: "{{ nname_2 }}"
|
||||
- name: "{{ nname_1 }}"
|
||||
aliases:
|
||||
- alias1
|
||||
- alias2
|
||||
- name: "{{ nname_2 }}"
|
||||
networks_cli_compatible: true
|
||||
register: networks_1
|
||||
|
||||
@ -314,8 +314,8 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
networks:
|
||||
- name: "{{ nname_1 }}"
|
||||
- name: "{{ nname_2 }}"
|
||||
- name: "{{ nname_1 }}"
|
||||
- name: "{{ nname_2 }}"
|
||||
networks_cli_compatible: true
|
||||
register: networks_2
|
||||
|
||||
@ -409,38 +409,38 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
# networks_1 has networks nname_1, nname_2
|
||||
- networks_1 is changed
|
||||
- networks_1.container.NetworkSettings.Networks | length == 2
|
||||
- nname_1 in networks_1.container.NetworkSettings.Networks
|
||||
- nname_2 in networks_1.container.NetworkSettings.Networks
|
||||
# networks_2 has networks nname_1, nname_2
|
||||
- networks_2 is not changed
|
||||
- networks_2.container.NetworkSettings.Networks | length == 2
|
||||
- nname_1 in networks_2.container.NetworkSettings.Networks
|
||||
- nname_2 in networks_1.container.NetworkSettings.Networks
|
||||
# networks_3 has networks 'bridge'
|
||||
- networks_3 is changed
|
||||
- networks_3.container.NetworkSettings.Networks | length == 1
|
||||
- "'default' in networks_3.container.NetworkSettings.Networks or 'bridge' in networks_3.container.NetworkSettings.Networks"
|
||||
# networks_4 has networks 'bridge'
|
||||
- networks_4 is not changed
|
||||
- networks_4.container.NetworkSettings.Networks | length == 1
|
||||
- "'default' in networks_4.container.NetworkSettings.Networks or 'bridge' in networks_4.container.NetworkSettings.Networks"
|
||||
# networks_5 has no networks
|
||||
- networks_5 is changed
|
||||
- networks_5.container.NetworkSettings.Networks | length == 0
|
||||
# networks_6 has networks 'bridge'
|
||||
- networks_6 is changed
|
||||
- networks_6.container.NetworkSettings.Networks | length == 1
|
||||
- "'default' in networks_6.container.NetworkSettings.Networks or 'bridge' in networks_6.container.NetworkSettings.Networks"
|
||||
# networks_7 has networks 'bridge'
|
||||
- networks_7 is not changed
|
||||
- networks_7.container.NetworkSettings.Networks | length == 1
|
||||
- "'default' in networks_7.container.NetworkSettings.Networks or 'bridge' in networks_7.container.NetworkSettings.Networks"
|
||||
# networks_8 has no networks
|
||||
- networks_8 is changed
|
||||
- networks_8.container.NetworkSettings.Networks | length == 0
|
||||
# networks_1 has networks nname_1, nname_2
|
||||
- networks_1 is changed
|
||||
- networks_1.container.NetworkSettings.Networks | length == 2
|
||||
- nname_1 in networks_1.container.NetworkSettings.Networks
|
||||
- nname_2 in networks_1.container.NetworkSettings.Networks
|
||||
# networks_2 has networks nname_1, nname_2
|
||||
- networks_2 is not changed
|
||||
- networks_2.container.NetworkSettings.Networks | length == 2
|
||||
- nname_1 in networks_2.container.NetworkSettings.Networks
|
||||
- nname_2 in networks_1.container.NetworkSettings.Networks
|
||||
# networks_3 has networks 'bridge'
|
||||
- networks_3 is changed
|
||||
- networks_3.container.NetworkSettings.Networks | length == 1
|
||||
- "'default' in networks_3.container.NetworkSettings.Networks or 'bridge' in networks_3.container.NetworkSettings.Networks"
|
||||
# networks_4 has networks 'bridge'
|
||||
- networks_4 is not changed
|
||||
- networks_4.container.NetworkSettings.Networks | length == 1
|
||||
- "'default' in networks_4.container.NetworkSettings.Networks or 'bridge' in networks_4.container.NetworkSettings.Networks"
|
||||
# networks_5 has no networks
|
||||
- networks_5 is changed
|
||||
- networks_5.container.NetworkSettings.Networks | length == 0
|
||||
# networks_6 has networks 'bridge'
|
||||
- networks_6 is changed
|
||||
- networks_6.container.NetworkSettings.Networks | length == 1
|
||||
- "'default' in networks_6.container.NetworkSettings.Networks or 'bridge' in networks_6.container.NetworkSettings.Networks"
|
||||
# networks_7 has networks 'bridge'
|
||||
- networks_7 is not changed
|
||||
- networks_7.container.NetworkSettings.Networks | length == 1
|
||||
- "'default' in networks_7.container.NetworkSettings.Networks or 'bridge' in networks_7.container.NetworkSettings.Networks"
|
||||
# networks_8 has no networks
|
||||
- networks_8 is changed
|
||||
- networks_8.container.NetworkSettings.Networks | length == 0
|
||||
|
||||
####################################################################
|
||||
## networks with comparisons #######################################
|
||||
@ -453,7 +453,7 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
networks:
|
||||
- name: "{{ nname_1 }}"
|
||||
- name: "{{ nname_1 }}"
|
||||
networks_cli_compatible: true
|
||||
register: networks_1
|
||||
|
||||
@ -464,7 +464,7 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
networks:
|
||||
- name: "{{ nname_2 }}"
|
||||
- name: "{{ nname_2 }}"
|
||||
networks_cli_compatible: true
|
||||
comparisons:
|
||||
network_mode: ignore # otherwise we'd have to set network_mode to nname_1
|
||||
@ -502,7 +502,7 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
networks:
|
||||
- name: "{{ nname_2 }}"
|
||||
- name: "{{ nname_2 }}"
|
||||
networks_cli_compatible: true
|
||||
comparisons:
|
||||
network_mode: ignore # otherwise we'd have to set network_mode to nname_1
|
||||
@ -517,7 +517,7 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
networks:
|
||||
- name: "{{ nname_2 }}"
|
||||
- name: "{{ nname_2 }}"
|
||||
networks_cli_compatible: true
|
||||
comparisons:
|
||||
networks: strict
|
||||
@ -546,34 +546,34 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
# networks_1 has networks nname_1
|
||||
- networks_1 is changed
|
||||
- networks_1.container.NetworkSettings.Networks | length == 1
|
||||
- nname_1 in networks_1.container.NetworkSettings.Networks
|
||||
# networks_2 has networks nname_1
|
||||
- networks_2 is not changed
|
||||
- networks_2.container.NetworkSettings.Networks | length == 1
|
||||
- nname_1 in networks_2.container.NetworkSettings.Networks
|
||||
# networks_3 has networks nname_1
|
||||
- networks_3 is not changed
|
||||
- networks_3.container.NetworkSettings.Networks | length == 1
|
||||
- nname_1 in networks_3.container.NetworkSettings.Networks
|
||||
# networks_4 has networks nname_1
|
||||
- networks_4 is not changed
|
||||
- networks_4.container.NetworkSettings.Networks | length == 1
|
||||
- nname_1 in networks_4.container.NetworkSettings.Networks
|
||||
# networks_5 has networks nname_1, nname_2
|
||||
- networks_5 is changed
|
||||
- networks_5.container.NetworkSettings.Networks | length == 2
|
||||
- nname_1 in networks_5.container.NetworkSettings.Networks
|
||||
- nname_2 in networks_5.container.NetworkSettings.Networks
|
||||
# networks_6 has networks nname_2
|
||||
- networks_6 is changed
|
||||
- networks_6.container.NetworkSettings.Networks | length == 1
|
||||
- nname_2 in networks_6.container.NetworkSettings.Networks
|
||||
# networks_7 has no networks
|
||||
- networks_7 is changed
|
||||
- networks_7.container.NetworkSettings.Networks | length == 0
|
||||
# networks_1 has networks nname_1
|
||||
- networks_1 is changed
|
||||
- networks_1.container.NetworkSettings.Networks | length == 1
|
||||
- nname_1 in networks_1.container.NetworkSettings.Networks
|
||||
# networks_2 has networks nname_1
|
||||
- networks_2 is not changed
|
||||
- networks_2.container.NetworkSettings.Networks | length == 1
|
||||
- nname_1 in networks_2.container.NetworkSettings.Networks
|
||||
# networks_3 has networks nname_1
|
||||
- networks_3 is not changed
|
||||
- networks_3.container.NetworkSettings.Networks | length == 1
|
||||
- nname_1 in networks_3.container.NetworkSettings.Networks
|
||||
# networks_4 has networks nname_1
|
||||
- networks_4 is not changed
|
||||
- networks_4.container.NetworkSettings.Networks | length == 1
|
||||
- nname_1 in networks_4.container.NetworkSettings.Networks
|
||||
# networks_5 has networks nname_1, nname_2
|
||||
- networks_5 is changed
|
||||
- networks_5.container.NetworkSettings.Networks | length == 2
|
||||
- nname_1 in networks_5.container.NetworkSettings.Networks
|
||||
- nname_2 in networks_5.container.NetworkSettings.Networks
|
||||
# networks_6 has networks nname_2
|
||||
- networks_6 is changed
|
||||
- networks_6.container.NetworkSettings.Networks | length == 1
|
||||
- nname_2 in networks_6.container.NetworkSettings.Networks
|
||||
# networks_7 has no networks
|
||||
- networks_7 is changed
|
||||
- networks_7.container.NetworkSettings.Networks | length == 0
|
||||
|
||||
####################################################################
|
||||
## networks with IP address ########################################
|
||||
@ -586,9 +586,9 @@
|
||||
name: "{{ cname }}"
|
||||
state: stopped
|
||||
networks:
|
||||
- name: "{{ nname_3 }}"
|
||||
ipv4_address: "{{ nname_3_ipv4_2 }}"
|
||||
ipv6_address: "{{ nname_3_ipv6_2 }}"
|
||||
- name: "{{ nname_3 }}"
|
||||
ipv4_address: "{{ nname_3_ipv4_2 }}"
|
||||
ipv6_address: "{{ nname_3_ipv6_2 }}"
|
||||
networks_cli_compatible: true
|
||||
register: networks_1
|
||||
|
||||
@ -599,9 +599,9 @@
|
||||
name: "{{ cname }}"
|
||||
state: stopped
|
||||
networks:
|
||||
- name: "{{ nname_3 }}"
|
||||
ipv4_address: "{{ nname_3_ipv4_2 }}"
|
||||
ipv6_address: "{{ nname_3_ipv6_2 }}"
|
||||
- name: "{{ nname_3 }}"
|
||||
ipv4_address: "{{ nname_3_ipv4_2 }}"
|
||||
ipv6_address: "{{ nname_3_ipv6_2 }}"
|
||||
networks_cli_compatible: true
|
||||
register: networks_2
|
||||
|
||||
@ -612,9 +612,9 @@
|
||||
name: "{{ cname }}"
|
||||
state: stopped
|
||||
networks:
|
||||
- name: "{{ nname_3 }}"
|
||||
ipv4_address: "{{ nname_3_ipv4_3 }}"
|
||||
ipv6_address: "{{ nname_3_ipv6_2 }}"
|
||||
- name: "{{ nname_3 }}"
|
||||
ipv4_address: "{{ nname_3_ipv4_3 }}"
|
||||
ipv6_address: "{{ nname_3_ipv6_2 }}"
|
||||
networks_cli_compatible: true
|
||||
register: networks_3
|
||||
|
||||
@ -625,9 +625,9 @@
|
||||
name: "{{ cname }}"
|
||||
state: stopped
|
||||
networks:
|
||||
- name: "{{ nname_3 }}"
|
||||
ipv4_address: "{{ nname_3_ipv4_3 }}"
|
||||
ipv6_address: "{{ nname_3_ipv6_3 }}"
|
||||
- name: "{{ nname_3 }}"
|
||||
ipv4_address: "{{ nname_3_ipv4_3 }}"
|
||||
ipv6_address: "{{ nname_3_ipv6_3 }}"
|
||||
networks_cli_compatible: true
|
||||
register: networks_4
|
||||
|
||||
@ -644,9 +644,9 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
networks:
|
||||
- name: "{{ nname_3 }}"
|
||||
ipv4_address: "{{ nname_3_ipv4_4 }}"
|
||||
ipv6_address: "{{ nname_3_ipv6_3 }}"
|
||||
- name: "{{ nname_3 }}"
|
||||
ipv4_address: "{{ nname_3_ipv4_4 }}"
|
||||
ipv6_address: "{{ nname_3_ipv6_3 }}"
|
||||
networks_cli_compatible: true
|
||||
force_kill: true
|
||||
register: networks_6
|
||||
@ -658,9 +658,9 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
networks:
|
||||
- name: "{{ nname_3 }}"
|
||||
ipv4_address: "{{ nname_3_ipv4_4 }}"
|
||||
ipv6_address: "{{ nname_3_ipv6_4 }}"
|
||||
- name: "{{ nname_3 }}"
|
||||
ipv4_address: "{{ nname_3_ipv4_4 }}"
|
||||
ipv6_address: "{{ nname_3_ipv6_4 }}"
|
||||
networks_cli_compatible: true
|
||||
force_kill: true
|
||||
register: networks_7
|
||||
@ -672,9 +672,9 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
networks:
|
||||
- name: "{{ nname_3 }}"
|
||||
ipv4_address: "{{ nname_3_ipv4_4 }}"
|
||||
ipv6_address: "{{ nname_3_ipv6_4 }}"
|
||||
- name: "{{ nname_3 }}"
|
||||
ipv4_address: "{{ nname_3_ipv4_4 }}"
|
||||
ipv6_address: "{{ nname_3_ipv6_4 }}"
|
||||
networks_cli_compatible: true
|
||||
register: networks_8
|
||||
|
||||
@ -687,46 +687,46 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- networks_1 is changed
|
||||
- networks_1.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv4Address == nname_3_ipv4_2
|
||||
- networks_1.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv6Address | normalize_ipaddr == nname_3_ipv6_2 | normalize_ipaddr
|
||||
- networks_1.container.NetworkSettings.Networks[nname_3].IPAddress == ""
|
||||
- networks_1.container.NetworkSettings.Networks[nname_3].GlobalIPv6Address == ""
|
||||
- networks_2 is not changed
|
||||
- networks_2.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv4Address == nname_3_ipv4_2
|
||||
- networks_2.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv6Address | normalize_ipaddr == nname_3_ipv6_2 | normalize_ipaddr
|
||||
- networks_2.container.NetworkSettings.Networks[nname_3].IPAddress == ""
|
||||
- networks_2.container.NetworkSettings.Networks[nname_3].GlobalIPv6Address == ""
|
||||
- networks_3 is changed
|
||||
- networks_3.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv4Address == nname_3_ipv4_3
|
||||
- networks_3.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv6Address | normalize_ipaddr == nname_3_ipv6_2 | normalize_ipaddr
|
||||
- networks_3.container.NetworkSettings.Networks[nname_3].IPAddress == ""
|
||||
- networks_3.container.NetworkSettings.Networks[nname_3].GlobalIPv6Address == ""
|
||||
- networks_4 is changed
|
||||
- networks_4.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv4Address == nname_3_ipv4_3
|
||||
- networks_4.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv6Address | normalize_ipaddr == nname_3_ipv6_3 | normalize_ipaddr
|
||||
- networks_4.container.NetworkSettings.Networks[nname_3].IPAddress == ""
|
||||
- networks_4.container.NetworkSettings.Networks[nname_3].GlobalIPv6Address == ""
|
||||
- networks_5 is changed
|
||||
- networks_5.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv4Address == nname_3_ipv4_3
|
||||
- networks_5.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv6Address | normalize_ipaddr == nname_3_ipv6_3 | normalize_ipaddr
|
||||
- networks_5.container.NetworkSettings.Networks[nname_3].IPAddress == nname_3_ipv4_3
|
||||
- networks_5.container.NetworkSettings.Networks[nname_3].GlobalIPv6Address | normalize_ipaddr == nname_3_ipv6_3 | normalize_ipaddr
|
||||
- networks_6 is changed
|
||||
- networks_6.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv4Address == nname_3_ipv4_4
|
||||
- networks_6.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv6Address | normalize_ipaddr == nname_3_ipv6_3 | normalize_ipaddr
|
||||
- networks_6.container.NetworkSettings.Networks[nname_3].IPAddress == nname_3_ipv4_4
|
||||
- networks_6.container.NetworkSettings.Networks[nname_3].GlobalIPv6Address | normalize_ipaddr == nname_3_ipv6_3 | normalize_ipaddr
|
||||
- networks_7 is changed
|
||||
- networks_7.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv4Address == nname_3_ipv4_4
|
||||
- networks_7.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv6Address | normalize_ipaddr == nname_3_ipv6_4 | normalize_ipaddr
|
||||
- networks_7.container.NetworkSettings.Networks[nname_3].IPAddress == nname_3_ipv4_4
|
||||
- networks_7.container.NetworkSettings.Networks[nname_3].GlobalIPv6Address | normalize_ipaddr == nname_3_ipv6_4 | normalize_ipaddr
|
||||
- networks_8 is not changed
|
||||
- networks_8.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv4Address == nname_3_ipv4_4
|
||||
- networks_8.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv6Address | normalize_ipaddr == nname_3_ipv6_4 | normalize_ipaddr
|
||||
- networks_8.container.NetworkSettings.Networks[nname_3].IPAddress == nname_3_ipv4_4
|
||||
- networks_8.container.NetworkSettings.Networks[nname_3].GlobalIPv6Address | normalize_ipaddr == nname_3_ipv6_4 | normalize_ipaddr
|
||||
- networks_1 is changed
|
||||
- networks_1.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv4Address == nname_3_ipv4_2
|
||||
- networks_1.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv6Address | normalize_ipaddr == nname_3_ipv6_2 | normalize_ipaddr
|
||||
- networks_1.container.NetworkSettings.Networks[nname_3].IPAddress == ""
|
||||
- networks_1.container.NetworkSettings.Networks[nname_3].GlobalIPv6Address == ""
|
||||
- networks_2 is not changed
|
||||
- networks_2.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv4Address == nname_3_ipv4_2
|
||||
- networks_2.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv6Address | normalize_ipaddr == nname_3_ipv6_2 | normalize_ipaddr
|
||||
- networks_2.container.NetworkSettings.Networks[nname_3].IPAddress == ""
|
||||
- networks_2.container.NetworkSettings.Networks[nname_3].GlobalIPv6Address == ""
|
||||
- networks_3 is changed
|
||||
- networks_3.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv4Address == nname_3_ipv4_3
|
||||
- networks_3.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv6Address | normalize_ipaddr == nname_3_ipv6_2 | normalize_ipaddr
|
||||
- networks_3.container.NetworkSettings.Networks[nname_3].IPAddress == ""
|
||||
- networks_3.container.NetworkSettings.Networks[nname_3].GlobalIPv6Address == ""
|
||||
- networks_4 is changed
|
||||
- networks_4.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv4Address == nname_3_ipv4_3
|
||||
- networks_4.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv6Address | normalize_ipaddr == nname_3_ipv6_3 | normalize_ipaddr
|
||||
- networks_4.container.NetworkSettings.Networks[nname_3].IPAddress == ""
|
||||
- networks_4.container.NetworkSettings.Networks[nname_3].GlobalIPv6Address == ""
|
||||
- networks_5 is changed
|
||||
- networks_5.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv4Address == nname_3_ipv4_3
|
||||
- networks_5.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv6Address | normalize_ipaddr == nname_3_ipv6_3 | normalize_ipaddr
|
||||
- networks_5.container.NetworkSettings.Networks[nname_3].IPAddress == nname_3_ipv4_3
|
||||
- networks_5.container.NetworkSettings.Networks[nname_3].GlobalIPv6Address | normalize_ipaddr == nname_3_ipv6_3 | normalize_ipaddr
|
||||
- networks_6 is changed
|
||||
- networks_6.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv4Address == nname_3_ipv4_4
|
||||
- networks_6.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv6Address | normalize_ipaddr == nname_3_ipv6_3 | normalize_ipaddr
|
||||
- networks_6.container.NetworkSettings.Networks[nname_3].IPAddress == nname_3_ipv4_4
|
||||
- networks_6.container.NetworkSettings.Networks[nname_3].GlobalIPv6Address | normalize_ipaddr == nname_3_ipv6_3 | normalize_ipaddr
|
||||
- networks_7 is changed
|
||||
- networks_7.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv4Address == nname_3_ipv4_4
|
||||
- networks_7.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv6Address | normalize_ipaddr == nname_3_ipv6_4 | normalize_ipaddr
|
||||
- networks_7.container.NetworkSettings.Networks[nname_3].IPAddress == nname_3_ipv4_4
|
||||
- networks_7.container.NetworkSettings.Networks[nname_3].GlobalIPv6Address | normalize_ipaddr == nname_3_ipv6_4 | normalize_ipaddr
|
||||
- networks_8 is not changed
|
||||
- networks_8.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv4Address == nname_3_ipv4_4
|
||||
- networks_8.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv6Address | normalize_ipaddr == nname_3_ipv6_4 | normalize_ipaddr
|
||||
- networks_8.container.NetworkSettings.Networks[nname_3].IPAddress == nname_3_ipv4_4
|
||||
- networks_8.container.NetworkSettings.Networks[nname_3].GlobalIPv6Address | normalize_ipaddr == nname_3_ipv6_4 | normalize_ipaddr
|
||||
|
||||
####################################################################
|
||||
####################################################################
|
||||
@ -738,8 +738,8 @@
|
||||
state: absent
|
||||
force: true
|
||||
loop:
|
||||
- "{{ nname_1 }}"
|
||||
- "{{ nname_2 }}"
|
||||
- "{{ nname_3 }}"
|
||||
- "{{ nname_1 }}"
|
||||
- "{{ nname_2 }}"
|
||||
- "{{ nname_3 }}"
|
||||
loop_control:
|
||||
loop_var: network_name
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -22,7 +22,7 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
published_ports:
|
||||
- "[::1:2000:3000"
|
||||
- "[::1:2000:3000"
|
||||
register: published_ports_1
|
||||
ignore_errors: true
|
||||
|
||||
@ -33,7 +33,7 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
published_ports:
|
||||
- "::1:2000:3000"
|
||||
- "::1:2000:3000"
|
||||
register: published_ports_2
|
||||
ignore_errors: true
|
||||
|
||||
@ -44,7 +44,7 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
published_ports:
|
||||
- "foo:2000:3000"
|
||||
- "foo:2000:3000"
|
||||
register: published_ports_3
|
||||
ignore_errors: true
|
||||
|
||||
@ -68,11 +68,11 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
exposed_ports:
|
||||
- "9001"
|
||||
- "9010-9050"
|
||||
- "9001"
|
||||
- "9010-9050"
|
||||
published_ports:
|
||||
- "9001:9001"
|
||||
- "9010-9050:9010-9050"
|
||||
- "9001:9001"
|
||||
- "9010-9050:9010-9050"
|
||||
force_kill: true
|
||||
register: published_ports_1
|
||||
|
||||
@ -83,11 +83,11 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
exposed_ports:
|
||||
- "9001"
|
||||
- "9010-9050"
|
||||
- "9001"
|
||||
- "9010-9050"
|
||||
published_ports:
|
||||
- "9001:9001"
|
||||
- "9010-9050:9010-9050"
|
||||
- "9001:9001"
|
||||
- "9010-9050:9010-9050"
|
||||
force_kill: true
|
||||
register: published_ports_2
|
||||
|
||||
@ -98,11 +98,11 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
exposed_ports:
|
||||
- "9001"
|
||||
- "9010-9050"
|
||||
- "9001"
|
||||
- "9010-9050"
|
||||
published_ports:
|
||||
- "9001:9001"
|
||||
- "9020-9060:9020-9060"
|
||||
- "9001:9001"
|
||||
- "9020-9060:9020-9060"
|
||||
force_kill: true
|
||||
register: published_ports_3
|
||||
|
||||
@ -115,9 +115,9 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- published_ports_1 is changed
|
||||
- published_ports_2 is not changed
|
||||
- published_ports_3 is changed
|
||||
- published_ports_1 is changed
|
||||
- published_ports_2 is not changed
|
||||
- published_ports_3 is changed
|
||||
|
||||
####################################################################
|
||||
## published_ports: one-element container port range ###############
|
||||
@ -130,7 +130,7 @@
|
||||
name: "{{ item }}"
|
||||
state: started
|
||||
published_ports:
|
||||
- "9010-9050:9010"
|
||||
- "9010-9050:9010"
|
||||
force_kill: true
|
||||
loop:
|
||||
- '{{ cname }}'
|
||||
@ -144,7 +144,7 @@
|
||||
name: "{{ item }}"
|
||||
state: started
|
||||
published_ports:
|
||||
- "9010-9050:9010"
|
||||
- "9010-9050:9010"
|
||||
force_kill: true
|
||||
loop:
|
||||
- '{{ cname }}'
|
||||
@ -158,7 +158,7 @@
|
||||
name: "{{ item }}"
|
||||
state: started
|
||||
published_ports:
|
||||
- "9010-9051:9010"
|
||||
- "9010-9051:9010"
|
||||
force_kill: true
|
||||
loop:
|
||||
- '{{ cname }}'
|
||||
@ -177,9 +177,9 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- published_ports_1 is changed
|
||||
- published_ports_2 is not changed
|
||||
- published_ports_3 is changed
|
||||
- published_ports_1 is changed
|
||||
- published_ports_2 is not changed
|
||||
- published_ports_3 is changed
|
||||
|
||||
####################################################################
|
||||
## published_ports: IPv6 addresses #################################
|
||||
@ -194,7 +194,7 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
published_ports:
|
||||
- "[::1]:9001:9001"
|
||||
- "[::1]:9001:9001"
|
||||
force_kill: true
|
||||
register: published_ports_1
|
||||
|
||||
@ -205,7 +205,7 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
published_ports:
|
||||
- "[::1]:9001:9001"
|
||||
- "[::1]:9001:9001"
|
||||
force_kill: true
|
||||
register: published_ports_2
|
||||
|
||||
@ -216,7 +216,7 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
published_ports:
|
||||
- "127.0.0.1:9001:9001"
|
||||
- "127.0.0.1:9001:9001"
|
||||
force_kill: true
|
||||
register: published_ports_3
|
||||
|
||||
@ -227,7 +227,7 @@
|
||||
name: "{{ cname }}"
|
||||
state: started
|
||||
published_ports:
|
||||
- "localhost:9001:9001"
|
||||
- "localhost:9001:9001"
|
||||
force_kill: true
|
||||
register: published_ports_4
|
||||
ignore_errors: true
|
||||
@ -241,10 +241,10 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- published_ports_1 is changed
|
||||
- published_ports_2 is not changed
|
||||
- published_ports_3 is changed
|
||||
- published_ports_4 is failed
|
||||
- published_ports_1 is changed
|
||||
- published_ports_2 is not changed
|
||||
- published_ports_3 is changed
|
||||
- published_ports_4 is failed
|
||||
|
||||
####################################################################
|
||||
## publish_all_ports ###############################################
|
||||
|
||||
@ -29,10 +29,10 @@
|
||||
# before the container is stopped (see
|
||||
# https://github.com/ansible/ansible/issues/45486).
|
||||
networks:
|
||||
- name: "nonexistant-network-{{ (2**32) | random }}"
|
||||
- name: "nonexistant-network-{{ (2**32) | random }}"
|
||||
published_ports:
|
||||
- '1:2'
|
||||
- '3'
|
||||
- '1:2'
|
||||
- '3'
|
||||
links:
|
||||
- "nonexistant-container-{{ (2**32) | random }}:test"
|
||||
- "nonexistant-container-{{ (2**32) | random }}:test"
|
||||
state: absent
|
||||
|
||||
@ -50,10 +50,10 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- create_1 is changed
|
||||
- create_2 is changed
|
||||
- create_3 is not changed
|
||||
- create_4 is not changed
|
||||
- create_1 is changed
|
||||
- create_2 is changed
|
||||
- create_3 is not changed
|
||||
- create_4 is not changed
|
||||
|
||||
####################################################################
|
||||
## Starting (after creation) #######################################
|
||||
@ -87,10 +87,10 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- start_1 is changed
|
||||
- start_2 is changed
|
||||
- start_3 is not changed
|
||||
- start_4 is not changed
|
||||
- start_1 is changed
|
||||
- start_2 is changed
|
||||
- start_3 is not changed
|
||||
- start_4 is not changed
|
||||
|
||||
####################################################################
|
||||
## Present check for running container #############################
|
||||
@ -115,8 +115,8 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- present_check_1 is not changed
|
||||
- present_check_2 is not changed
|
||||
- present_check_1 is not changed
|
||||
- present_check_2 is not changed
|
||||
|
||||
####################################################################
|
||||
## Starting (from scratch) #########################################
|
||||
@ -168,10 +168,10 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- start_scratch_1 is changed
|
||||
- start_scratch_2 is changed
|
||||
- start_scratch_3 is not changed
|
||||
- start_scratch_4 is not changed
|
||||
- start_scratch_1 is changed
|
||||
- start_scratch_2 is changed
|
||||
- start_scratch_3 is not changed
|
||||
- start_scratch_4 is not changed
|
||||
|
||||
####################################################################
|
||||
## Recreating ######################################################
|
||||
@ -253,16 +253,16 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- recreate_2 is changed
|
||||
- recreate_3 is changed
|
||||
- recreate_4 is changed
|
||||
- recreate_5 is changed
|
||||
- recreate_6 is changed
|
||||
- recreate_1.container.Id == recreate_2.container.Id
|
||||
- recreate_1.container.Id != recreate_3.container.Id
|
||||
- recreate_3.container.Id == recreate_4.container.Id
|
||||
- recreate_4.container.Id == recreate_5.container.Id
|
||||
- recreate_4.container.Id != recreate_6.container.Id
|
||||
- recreate_2 is changed
|
||||
- recreate_3 is changed
|
||||
- recreate_4 is changed
|
||||
- recreate_5 is changed
|
||||
- recreate_6 is changed
|
||||
- recreate_1.container.Id == recreate_2.container.Id
|
||||
- recreate_1.container.Id != recreate_3.container.Id
|
||||
- recreate_3.container.Id == recreate_4.container.Id
|
||||
- recreate_4.container.Id == recreate_5.container.Id
|
||||
- recreate_4.container.Id != recreate_6.container.Id
|
||||
|
||||
####################################################################
|
||||
## Restarting ######################################################
|
||||
@ -276,7 +276,7 @@
|
||||
state: started
|
||||
stop_timeout: 1
|
||||
volumes:
|
||||
- /tmp/tmp
|
||||
- /tmp/tmp
|
||||
register: restart_1
|
||||
|
||||
- name: Restarting (restart, check mode)
|
||||
@ -310,7 +310,7 @@
|
||||
state: started
|
||||
stop_timeout: 1
|
||||
volumes:
|
||||
- /tmp/tmp
|
||||
- /tmp/tmp
|
||||
register: restart_4
|
||||
|
||||
- name: cleanup
|
||||
@ -322,11 +322,11 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- restart_1 is changed
|
||||
- restart_2 is changed
|
||||
- restart_3 is changed
|
||||
- restart_1.container.Id == restart_3.container.Id
|
||||
- restart_4 is not changed
|
||||
- restart_1 is changed
|
||||
- restart_2 is changed
|
||||
- restart_3 is changed
|
||||
- restart_1.container.Id == restart_3.container.Id
|
||||
- restart_4 is not changed
|
||||
|
||||
####################################################################
|
||||
## Stopping ########################################################
|
||||
@ -368,10 +368,10 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- stop_1 is changed
|
||||
- stop_2 is changed
|
||||
- stop_3 is not changed
|
||||
- stop_4 is not changed
|
||||
- stop_1 is changed
|
||||
- stop_2 is changed
|
||||
- stop_3 is not changed
|
||||
- stop_4 is not changed
|
||||
|
||||
####################################################################
|
||||
## Removing ########################################################
|
||||
@ -405,10 +405,10 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- remove_1 is changed
|
||||
- remove_2 is changed
|
||||
- remove_3 is not changed
|
||||
- remove_4 is not changed
|
||||
- remove_1 is changed
|
||||
- remove_2 is changed
|
||||
- remove_3 is not changed
|
||||
- remove_4 is not changed
|
||||
|
||||
####################################################################
|
||||
## Removing (from running) #########################################
|
||||
@ -453,7 +453,7 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- remove_from_running_1 is changed
|
||||
- remove_from_running_2 is changed
|
||||
- remove_from_running_3 is not changed
|
||||
- remove_from_running_4 is not changed
|
||||
- remove_from_running_1 is changed
|
||||
- remove_from_running_2 is changed
|
||||
- remove_from_running_3 is not changed
|
||||
- remove_from_running_4 is not changed
|
||||
|
||||
@ -131,91 +131,91 @@
|
||||
- name: Check general things
|
||||
assert:
|
||||
that:
|
||||
- create is changed
|
||||
- update is changed
|
||||
- update2 is changed
|
||||
- recreate is changed
|
||||
- create is changed
|
||||
- update is changed
|
||||
- update2 is changed
|
||||
- recreate is changed
|
||||
|
||||
# Make sure the container was *not* recreated when it should not be
|
||||
- create.container.Id == update.container.Id
|
||||
- create.container.Id == update2.container.Id
|
||||
# Make sure the container was *not* recreated when it should not be
|
||||
- create.container.Id == update.container.Id
|
||||
- create.container.Id == update2.container.Id
|
||||
|
||||
# Make sure that the container was recreated when it should be
|
||||
- create.container.Id != recreate.container.Id
|
||||
# Make sure that the container was recreated when it should be
|
||||
- create.container.Id != recreate.container.Id
|
||||
|
||||
- name: Check diff for first update
|
||||
assert:
|
||||
that:
|
||||
# blkio_weight sometimes cannot be set, then we end up with 0 instead of the value we had
|
||||
- >-
|
||||
not has_blkio_weight or update.diff.before.blkio_weight == 123 or ('Docker warning: Your kernel does not support Block I/O weight or the cgroup is not mounted. Weight discarded.' in (create.warnings | default([])))
|
||||
- not has_blkio_weight or update.diff.after.blkio_weight == 234
|
||||
- update.diff.before.cpu_period == 90000
|
||||
- update.diff.after.cpu_period == 50000
|
||||
- update.diff.before.cpu_quota == 150000
|
||||
- update.diff.after.cpu_quota == 50000
|
||||
- update.diff.before.cpu_shares == 900
|
||||
- update.diff.after.cpu_shares == 1100
|
||||
- update.diff.before.memory == 67108864
|
||||
- update.diff.after.memory == 50331648
|
||||
- update.diff.before.memory_reservation == 67108864
|
||||
- update.diff.after.memory_reservation == 50331648
|
||||
- >-
|
||||
(update.diff.before.memory_swap | default(0)) == 67108864 or ('Docker warning: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.' in (create.warnings | default([])))
|
||||
- >-
|
||||
(update.diff.after.memory_swap | default(0)) == -1 or ('Docker warning: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.' in (create.warnings | default([])))
|
||||
- "'restart_policy' not in update.diff.before"
|
||||
- update.diff.before.restart_retries == 5
|
||||
- update.diff.after.restart_retries == 2
|
||||
# blkio_weight sometimes cannot be set, then we end up with 0 instead of the value we had
|
||||
- >-
|
||||
not has_blkio_weight or update.diff.before.blkio_weight == 123 or ('Docker warning: Your kernel does not support Block I/O weight or the cgroup is not mounted. Weight discarded.' in (create.warnings | default([])))
|
||||
- not has_blkio_weight or update.diff.after.blkio_weight == 234
|
||||
- update.diff.before.cpu_period == 90000
|
||||
- update.diff.after.cpu_period == 50000
|
||||
- update.diff.before.cpu_quota == 150000
|
||||
- update.diff.after.cpu_quota == 50000
|
||||
- update.diff.before.cpu_shares == 900
|
||||
- update.diff.after.cpu_shares == 1100
|
||||
- update.diff.before.memory == 67108864
|
||||
- update.diff.after.memory == 50331648
|
||||
- update.diff.before.memory_reservation == 67108864
|
||||
- update.diff.after.memory_reservation == 50331648
|
||||
- >-
|
||||
(update.diff.before.memory_swap | default(0)) == 67108864 or ('Docker warning: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.' in (create.warnings | default([])))
|
||||
- >-
|
||||
(update.diff.after.memory_swap | default(0)) == -1 or ('Docker warning: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.' in (create.warnings | default([])))
|
||||
- "'restart_policy' not in update.diff.before"
|
||||
- update.diff.before.restart_retries == 5
|
||||
- update.diff.after.restart_retries == 2
|
||||
|
||||
- name: Check diff for second update
|
||||
assert:
|
||||
that:
|
||||
- >-
|
||||
not has_blkio_weight or update2.diff.before.blkio_weight == 234 or ('Docker warning: Your kernel does not support Block I/O weight or the cgroup is not mounted. Weight discarded.' in (create.warnings | default([])))
|
||||
- not has_blkio_weight or update2.diff.after.blkio_weight == 135
|
||||
- update2.diff.before.cpu_period == 50000
|
||||
- update2.diff.after.cpu_period == 30000
|
||||
- update2.diff.before.cpu_quota == 50000
|
||||
- update2.diff.after.cpu_quota == 40000
|
||||
- update2.diff.before.cpu_shares == 1100
|
||||
- update2.diff.after.cpu_shares == 1000
|
||||
- update2.diff.before.memory == 50331648
|
||||
- update2.diff.after.memory == 33554432
|
||||
- update2.diff.before.memory_reservation == 50331648
|
||||
- update2.diff.after.memory_reservation == 31457280
|
||||
- >-
|
||||
(update2.diff.before.memory_swap | default(0)) == -1 or ('Docker warning: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.' in (create.warnings | default([])))
|
||||
- >-
|
||||
(update2.diff.after.memory_swap | default(0)) == 134217728 or ('Docker warning: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.' in (create.warnings | default([])))
|
||||
- update2.diff.before.restart_policy == 'on-failure'
|
||||
- update2.diff.after.restart_policy == 'always'
|
||||
- update2.diff.before.restart_retries == 2
|
||||
- update2.diff.after.restart_retries == 0
|
||||
- >-
|
||||
not has_blkio_weight or update2.diff.before.blkio_weight == 234 or ('Docker warning: Your kernel does not support Block I/O weight or the cgroup is not mounted. Weight discarded.' in (create.warnings | default([])))
|
||||
- not has_blkio_weight or update2.diff.after.blkio_weight == 135
|
||||
- update2.diff.before.cpu_period == 50000
|
||||
- update2.diff.after.cpu_period == 30000
|
||||
- update2.diff.before.cpu_quota == 50000
|
||||
- update2.diff.after.cpu_quota == 40000
|
||||
- update2.diff.before.cpu_shares == 1100
|
||||
- update2.diff.after.cpu_shares == 1000
|
||||
- update2.diff.before.memory == 50331648
|
||||
- update2.diff.after.memory == 33554432
|
||||
- update2.diff.before.memory_reservation == 50331648
|
||||
- update2.diff.after.memory_reservation == 31457280
|
||||
- >-
|
||||
(update2.diff.before.memory_swap | default(0)) == -1 or ('Docker warning: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.' in (create.warnings | default([])))
|
||||
- >-
|
||||
(update2.diff.after.memory_swap | default(0)) == 134217728 or ('Docker warning: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.' in (create.warnings | default([])))
|
||||
- update2.diff.before.restart_policy == 'on-failure'
|
||||
- update2.diff.after.restart_policy == 'always'
|
||||
- update2.diff.before.restart_retries == 2
|
||||
- update2.diff.after.restart_retries == 0
|
||||
|
||||
- name: Check diff for recreation
|
||||
assert:
|
||||
that:
|
||||
- >-
|
||||
not has_blkio_weight or recreate.diff.before.blkio_weight == 135 or ('Docker warning: Your kernel does not support Block I/O weight or the cgroup is not mounted. Weight discarded.' in (create.warnings | default([])))
|
||||
- not has_blkio_weight or recreate.diff.after.blkio_weight == 234
|
||||
- recreate.diff.before.cpu_period == 30000
|
||||
- recreate.diff.after.cpu_period == 50000
|
||||
- recreate.diff.before.cpu_quota == 40000
|
||||
- recreate.diff.after.cpu_quota == 50000
|
||||
- recreate.diff.before.cpu_shares == 1000
|
||||
- recreate.diff.after.cpu_shares == 1100
|
||||
- recreate.diff.before.memory == 33554432
|
||||
- recreate.diff.after.memory == 50331648
|
||||
- recreate.diff.before.memory_reservation == 31457280
|
||||
- recreate.diff.after.memory_reservation == 50331648
|
||||
- >-
|
||||
(recreate.diff.before.memory_swap | default(0)) == 134217728 or ('Docker warning: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.' in (create.warnings | default([])))
|
||||
- >-
|
||||
(recreate.diff.after.memory_swap | default(0)) == -1 or ('Docker warning: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.' in (create.warnings | default([])))
|
||||
- recreate.diff.before.restart_policy == 'always'
|
||||
- recreate.diff.after.restart_policy == 'on-failure'
|
||||
- recreate.diff.before.restart_retries == 0
|
||||
- recreate.diff.after.restart_retries == 2
|
||||
- recreate.diff.before.command == ['/bin/sh', '-c', 'sleep 10m']
|
||||
- recreate.diff.after.command == ['/bin/sh', '-c', 'sleep 20m']
|
||||
- >-
|
||||
not has_blkio_weight or recreate.diff.before.blkio_weight == 135 or ('Docker warning: Your kernel does not support Block I/O weight or the cgroup is not mounted. Weight discarded.' in (create.warnings | default([])))
|
||||
- not has_blkio_weight or recreate.diff.after.blkio_weight == 234
|
||||
- recreate.diff.before.cpu_period == 30000
|
||||
- recreate.diff.after.cpu_period == 50000
|
||||
- recreate.diff.before.cpu_quota == 40000
|
||||
- recreate.diff.after.cpu_quota == 50000
|
||||
- recreate.diff.before.cpu_shares == 1000
|
||||
- recreate.diff.after.cpu_shares == 1100
|
||||
- recreate.diff.before.memory == 33554432
|
||||
- recreate.diff.after.memory == 50331648
|
||||
- recreate.diff.before.memory_reservation == 31457280
|
||||
- recreate.diff.after.memory_reservation == 50331648
|
||||
- >-
|
||||
(recreate.diff.before.memory_swap | default(0)) == 134217728 or ('Docker warning: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.' in (create.warnings | default([])))
|
||||
- >-
|
||||
(recreate.diff.after.memory_swap | default(0)) == -1 or ('Docker warning: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.' in (create.warnings | default([])))
|
||||
- recreate.diff.before.restart_policy == 'always'
|
||||
- recreate.diff.after.restart_policy == 'on-failure'
|
||||
- recreate.diff.before.restart_retries == 0
|
||||
- recreate.diff.after.restart_retries == 2
|
||||
- recreate.diff.before.command == ['/bin/sh', '-c', 'sleep 10m']
|
||||
- recreate.diff.after.command == ['/bin/sh', '-c', 'sleep 20m']
|
||||
|
||||
@ -9,218 +9,218 @@
|
||||
####################################################################
|
||||
|
||||
- block:
|
||||
- name: Create random container name
|
||||
set_fact:
|
||||
cname: "{{ 'ansible-docker-test-%0x' % ((2**32) | random) }}"
|
||||
- name: Create random container name
|
||||
set_fact:
|
||||
cname: "{{ 'ansible-docker-test-%0x' % ((2**32) | random) }}"
|
||||
|
||||
- name: Make sure container is not there
|
||||
docker_container:
|
||||
name: "{{ cname }}"
|
||||
state: absent
|
||||
force_kill: true
|
||||
- name: Make sure container is not there
|
||||
docker_container:
|
||||
name: "{{ cname }}"
|
||||
state: absent
|
||||
force_kill: true
|
||||
|
||||
- name: Execute in a non-present container
|
||||
docker_container_exec:
|
||||
container: "{{ cname }}"
|
||||
command: "/bin/bash -c 'ls -a'"
|
||||
register: result
|
||||
ignore_errors: true
|
||||
- name: Execute in a non-present container
|
||||
docker_container_exec:
|
||||
container: "{{ cname }}"
|
||||
command: "/bin/bash -c 'ls -a'"
|
||||
register: result
|
||||
ignore_errors: true
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result is failed
|
||||
- "'Could not find container' in result.msg"
|
||||
- assert:
|
||||
that:
|
||||
- result is failed
|
||||
- "'Could not find container' in result.msg"
|
||||
|
||||
- name: Make sure container exists
|
||||
docker_container:
|
||||
name: "{{ cname }}"
|
||||
image: "{{ docker_test_image_alpine }}"
|
||||
command: '/bin/sh -c "sleep 10m"'
|
||||
state: started
|
||||
force_kill: true
|
||||
- name: Make sure container exists
|
||||
docker_container:
|
||||
name: "{{ cname }}"
|
||||
image: "{{ docker_test_image_alpine }}"
|
||||
command: '/bin/sh -c "sleep 10m"'
|
||||
state: started
|
||||
force_kill: true
|
||||
|
||||
- name: Execute in a present container (command)
|
||||
docker_container_exec:
|
||||
container: "{{ cname }}"
|
||||
command: "/bin/sh -c 'ls -a'"
|
||||
register: result_cmd
|
||||
- name: Execute in a present container (command)
|
||||
docker_container_exec:
|
||||
container: "{{ cname }}"
|
||||
command: "/bin/sh -c 'ls -a'"
|
||||
register: result_cmd
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result_cmd.rc == 0
|
||||
- "'stdout' in result_cmd"
|
||||
- "'stdout_lines' in result_cmd"
|
||||
- "'stderr' in result_cmd"
|
||||
- "'stderr_lines' in result_cmd"
|
||||
- assert:
|
||||
that:
|
||||
- result_cmd.rc == 0
|
||||
- "'stdout' in result_cmd"
|
||||
- "'stdout_lines' in result_cmd"
|
||||
- "'stderr' in result_cmd"
|
||||
- "'stderr_lines' in result_cmd"
|
||||
|
||||
- name: Execute in a present container (argv)
|
||||
docker_container_exec:
|
||||
container: "{{ cname }}"
|
||||
argv:
|
||||
- /bin/sh
|
||||
- '-c'
|
||||
- ls -a
|
||||
register: result_argv
|
||||
- name: Execute in a present container (argv)
|
||||
docker_container_exec:
|
||||
container: "{{ cname }}"
|
||||
argv:
|
||||
- /bin/sh
|
||||
- '-c'
|
||||
- ls -a
|
||||
register: result_argv
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result_argv.rc == 0
|
||||
- "'stdout' in result_argv"
|
||||
- "'stdout_lines' in result_argv"
|
||||
- "'stderr' in result_argv"
|
||||
- "'stderr_lines' in result_argv"
|
||||
- result_cmd.stdout == result_argv.stdout
|
||||
- assert:
|
||||
that:
|
||||
- result_argv.rc == 0
|
||||
- "'stdout' in result_argv"
|
||||
- "'stdout_lines' in result_argv"
|
||||
- "'stderr' in result_argv"
|
||||
- "'stderr_lines' in result_argv"
|
||||
- result_cmd.stdout == result_argv.stdout
|
||||
|
||||
- name: Execute in a present container (cat without stdin)
|
||||
docker_container_exec:
|
||||
container: "{{ cname }}"
|
||||
argv:
|
||||
- /bin/sh
|
||||
- '-c'
|
||||
- cat
|
||||
register: result
|
||||
- name: Execute in a present container (cat without stdin)
|
||||
docker_container_exec:
|
||||
container: "{{ cname }}"
|
||||
argv:
|
||||
- /bin/sh
|
||||
- '-c'
|
||||
- cat
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result.rc == 0
|
||||
- result.stdout == ''
|
||||
- result.stdout_lines == []
|
||||
- result.stderr == ''
|
||||
- result.stderr_lines == []
|
||||
- assert:
|
||||
that:
|
||||
- result.rc == 0
|
||||
- result.stdout == ''
|
||||
- result.stdout_lines == []
|
||||
- result.stderr == ''
|
||||
- result.stderr_lines == []
|
||||
|
||||
- name: Execute in a present container (cat with stdin)
|
||||
docker_container_exec:
|
||||
container: "{{ cname }}"
|
||||
argv:
|
||||
- /bin/sh
|
||||
- '-c'
|
||||
- cat
|
||||
stdin: Hello world!
|
||||
strip_empty_ends: false
|
||||
register: result
|
||||
- name: Execute in a present container (cat with stdin)
|
||||
docker_container_exec:
|
||||
container: "{{ cname }}"
|
||||
argv:
|
||||
- /bin/sh
|
||||
- '-c'
|
||||
- cat
|
||||
stdin: Hello world!
|
||||
strip_empty_ends: false
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result.rc == 0
|
||||
- result.stdout == 'Hello world!\n'
|
||||
- result.stdout_lines == ['Hello world!']
|
||||
- result.stderr == ''
|
||||
- result.stderr_lines == []
|
||||
- assert:
|
||||
that:
|
||||
- result.rc == 0
|
||||
- result.stdout == 'Hello world!\n'
|
||||
- result.stdout_lines == ['Hello world!']
|
||||
- result.stderr == ''
|
||||
- result.stderr_lines == []
|
||||
|
||||
- name: Execute in a present container (cat with stdin, no newline)
|
||||
docker_container_exec:
|
||||
container: "{{ cname }}"
|
||||
argv:
|
||||
- /bin/sh
|
||||
- '-c'
|
||||
- cat
|
||||
stdin: Hello world!
|
||||
stdin_add_newline: false
|
||||
strip_empty_ends: false
|
||||
register: result
|
||||
- name: Execute in a present container (cat with stdin, no newline)
|
||||
docker_container_exec:
|
||||
container: "{{ cname }}"
|
||||
argv:
|
||||
- /bin/sh
|
||||
- '-c'
|
||||
- cat
|
||||
stdin: Hello world!
|
||||
stdin_add_newline: false
|
||||
strip_empty_ends: false
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result.rc == 0
|
||||
- result.stdout == 'Hello world!'
|
||||
- result.stdout_lines == ['Hello world!']
|
||||
- result.stderr == ''
|
||||
- result.stderr_lines == []
|
||||
- assert:
|
||||
that:
|
||||
- result.rc == 0
|
||||
- result.stdout == 'Hello world!'
|
||||
- result.stdout_lines == ['Hello world!']
|
||||
- result.stderr == ''
|
||||
- result.stderr_lines == []
|
||||
|
||||
- name: Execute in a present container (cat with stdin, newline but stripping)
|
||||
docker_container_exec:
|
||||
container: "{{ cname }}"
|
||||
argv:
|
||||
- /bin/sh
|
||||
- '-c'
|
||||
- cat
|
||||
stdin: Hello world!
|
||||
stdin_add_newline: true
|
||||
strip_empty_ends: true
|
||||
register: result
|
||||
- name: Execute in a present container (cat with stdin, newline but stripping)
|
||||
docker_container_exec:
|
||||
container: "{{ cname }}"
|
||||
argv:
|
||||
- /bin/sh
|
||||
- '-c'
|
||||
- cat
|
||||
stdin: Hello world!
|
||||
stdin_add_newline: true
|
||||
strip_empty_ends: true
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result.rc == 0
|
||||
- result.stdout == 'Hello world!'
|
||||
- result.stdout_lines == ['Hello world!']
|
||||
- result.stderr == ''
|
||||
- result.stderr_lines == []
|
||||
- assert:
|
||||
that:
|
||||
- result.rc == 0
|
||||
- result.stdout == 'Hello world!'
|
||||
- result.stdout_lines == ['Hello world!']
|
||||
- result.stderr == ''
|
||||
- result.stderr_lines == []
|
||||
|
||||
- name: Prepare long string
|
||||
set_fact:
|
||||
very_long_string: "{{ 'something long ' * 10000 }}"
|
||||
very_long_string2: "{{ 'something else ' * 5000 }}"
|
||||
- name: Prepare long string
|
||||
set_fact:
|
||||
very_long_string: "{{ 'something long ' * 10000 }}"
|
||||
very_long_string2: "{{ 'something else ' * 5000 }}"
|
||||
|
||||
- name: Execute in a present container (long stdin)
|
||||
docker_container_exec:
|
||||
container: "{{ cname }}"
|
||||
argv:
|
||||
- /bin/sh
|
||||
- '-c'
|
||||
- cat
|
||||
stdin: |-
|
||||
{{ very_long_string }}
|
||||
{{ very_long_string2 }}
|
||||
register: result
|
||||
- name: Execute in a present container (long stdin)
|
||||
docker_container_exec:
|
||||
container: "{{ cname }}"
|
||||
argv:
|
||||
- /bin/sh
|
||||
- '-c'
|
||||
- cat
|
||||
stdin: |-
|
||||
{{ very_long_string }}
|
||||
{{ very_long_string2 }}
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result is changed
|
||||
- result.rc == 0
|
||||
- result.stdout == (very_long_string ~ '\n' ~ very_long_string2)
|
||||
- result.stdout_lines == [very_long_string, very_long_string2]
|
||||
- result.stderr == ''
|
||||
- result.stderr_lines == []
|
||||
- "'exec_id' not in result"
|
||||
- assert:
|
||||
that:
|
||||
- result is changed
|
||||
- result.rc == 0
|
||||
- result.stdout == (very_long_string ~ '\n' ~ very_long_string2)
|
||||
- result.stdout_lines == [very_long_string, very_long_string2]
|
||||
- result.stderr == ''
|
||||
- result.stderr_lines == []
|
||||
- "'exec_id' not in result"
|
||||
|
||||
- name: Execute in a present container (detached)
|
||||
docker_container_exec:
|
||||
container: "{{ cname }}"
|
||||
argv:
|
||||
- /bin/sh
|
||||
- '-c'
|
||||
- sleep 1m
|
||||
detach: true
|
||||
register: result
|
||||
- name: Execute in a present container (detached)
|
||||
docker_container_exec:
|
||||
container: "{{ cname }}"
|
||||
argv:
|
||||
- /bin/sh
|
||||
- '-c'
|
||||
- sleep 1m
|
||||
detach: true
|
||||
register: result
|
||||
|
||||
- debug: var=result
|
||||
- debug: var=result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result is changed
|
||||
- "'rc' not in result"
|
||||
- "'stdout' not in result"
|
||||
- "'stderr' not in result"
|
||||
- result.exec_id is string
|
||||
- assert:
|
||||
that:
|
||||
- result is changed
|
||||
- "'rc' not in result"
|
||||
- "'stdout' not in result"
|
||||
- "'stderr' not in result"
|
||||
- result.exec_id is string
|
||||
|
||||
- name: Execute in a present container (environment variable)
|
||||
docker_container_exec:
|
||||
container: "{{ cname }}"
|
||||
argv:
|
||||
- /bin/sh
|
||||
- '-c'
|
||||
- 'echo "$FOO" ; echo $FOO > /dev/stderr'
|
||||
env:
|
||||
FOO: |-
|
||||
bar
|
||||
baz
|
||||
register: result
|
||||
- name: Execute in a present container (environment variable)
|
||||
docker_container_exec:
|
||||
container: "{{ cname }}"
|
||||
argv:
|
||||
- /bin/sh
|
||||
- '-c'
|
||||
- 'echo "$FOO" ; echo $FOO > /dev/stderr'
|
||||
env:
|
||||
FOO: |-
|
||||
bar
|
||||
baz
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result.rc == 0
|
||||
- result.stdout == 'bar\nbaz'
|
||||
- result.stdout_lines == ['bar', 'baz']
|
||||
- result.stderr == 'bar baz'
|
||||
- result.stderr_lines == ['bar baz']
|
||||
- assert:
|
||||
that:
|
||||
- result.rc == 0
|
||||
- result.stdout == 'bar\nbaz'
|
||||
- result.stdout_lines == ['bar', 'baz']
|
||||
- result.stderr == 'bar baz'
|
||||
- result.stderr_lines == ['bar baz']
|
||||
|
||||
always:
|
||||
- name: Cleanup
|
||||
docker_container:
|
||||
name: "{{ cname }}"
|
||||
state: absent
|
||||
force_kill: true
|
||||
- name: Cleanup
|
||||
docker_container:
|
||||
name: "{{ cname }}"
|
||||
state: absent
|
||||
force_kill: true
|
||||
|
||||
when: docker_api_version is version('1.25', '>=')
|
||||
|
||||
|
||||
@ -9,74 +9,74 @@
|
||||
####################################################################
|
||||
|
||||
- block:
|
||||
- name: Create random container name
|
||||
set_fact:
|
||||
cname: "{{ 'ansible-docker-test-%0x' % ((2**32) | random) }}"
|
||||
- name: Create random container name
|
||||
set_fact:
|
||||
cname: "{{ 'ansible-docker-test-%0x' % ((2**32) | random) }}"
|
||||
|
||||
- name: Make sure container is not there
|
||||
docker_container:
|
||||
name: "{{ cname }}"
|
||||
state: absent
|
||||
force_kill: true
|
||||
- name: Make sure container is not there
|
||||
docker_container:
|
||||
name: "{{ cname }}"
|
||||
state: absent
|
||||
force_kill: true
|
||||
|
||||
- name: Inspect a non-present container
|
||||
docker_container_info:
|
||||
name: "{{ cname }}"
|
||||
register: result
|
||||
- name: Inspect a non-present container
|
||||
docker_container_info:
|
||||
name: "{{ cname }}"
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- "not result.exists"
|
||||
- "'container' in result"
|
||||
- "result.container is none"
|
||||
- assert:
|
||||
that:
|
||||
- "not result.exists"
|
||||
- "'container' in result"
|
||||
- "result.container is none"
|
||||
|
||||
- name: Make sure container exists
|
||||
docker_container:
|
||||
name: "{{ cname }}"
|
||||
image: "{{ docker_test_image_alpine }}"
|
||||
command: '/bin/sh -c "sleep 10m"'
|
||||
state: started
|
||||
force_kill: true
|
||||
- name: Make sure container exists
|
||||
docker_container:
|
||||
name: "{{ cname }}"
|
||||
image: "{{ docker_test_image_alpine }}"
|
||||
command: '/bin/sh -c "sleep 10m"'
|
||||
state: started
|
||||
force_kill: true
|
||||
|
||||
- name: Inspect a present container
|
||||
docker_container_info:
|
||||
name: "{{ cname }}"
|
||||
register: result
|
||||
- name: Dump docker_container_info result
|
||||
debug: var=result
|
||||
- name: Inspect a present container
|
||||
docker_container_info:
|
||||
name: "{{ cname }}"
|
||||
register: result
|
||||
- name: Dump docker_container_info result
|
||||
debug: var=result
|
||||
|
||||
- name: "Comparison: use 'docker inspect'"
|
||||
command: docker inspect "{{ cname }}"
|
||||
register: docker_inspect
|
||||
ignore_errors: true
|
||||
- block:
|
||||
- set_fact:
|
||||
docker_inspect_result: "{{ docker_inspect.stdout | from_json }}"
|
||||
- name: Dump docker inspect result
|
||||
debug: var=docker_inspect_result
|
||||
when: docker_inspect is not failed
|
||||
- name: "Comparison: use 'docker inspect'"
|
||||
command: docker inspect "{{ cname }}"
|
||||
register: docker_inspect
|
||||
ignore_errors: true
|
||||
- block:
|
||||
- set_fact:
|
||||
docker_inspect_result: "{{ docker_inspect.stdout | from_json }}"
|
||||
- name: Dump docker inspect result
|
||||
debug: var=docker_inspect_result
|
||||
when: docker_inspect is not failed
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result.exists
|
||||
- "'container' in result"
|
||||
- "result.container is truthy"
|
||||
- assert:
|
||||
that:
|
||||
- result.exists
|
||||
- "'container' in result"
|
||||
- "result.container is truthy"
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- "result.container == docker_inspect_result[0]"
|
||||
when: docker_inspect is not failed
|
||||
- assert:
|
||||
that:
|
||||
- "'is too new. Maximum supported API version is' in docker_inspect.stderr"
|
||||
when: docker_inspect is failed
|
||||
- assert:
|
||||
that:
|
||||
- "result.container == docker_inspect_result[0]"
|
||||
when: docker_inspect is not failed
|
||||
- assert:
|
||||
that:
|
||||
- "'is too new. Maximum supported API version is' in docker_inspect.stderr"
|
||||
when: docker_inspect is failed
|
||||
|
||||
always:
|
||||
- name: Cleanup
|
||||
docker_container:
|
||||
name: "{{ cname }}"
|
||||
state: absent
|
||||
force_kill: true
|
||||
- name: Cleanup
|
||||
docker_container:
|
||||
name: "{{ cname }}"
|
||||
state: absent
|
||||
force_kill: true
|
||||
|
||||
when: docker_api_version is version('1.25', '>=')
|
||||
|
||||
|
||||
@ -51,8 +51,8 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- create_1 is changed
|
||||
- create_2 is not changed
|
||||
- create_1 is changed
|
||||
- create_2 is not changed
|
||||
|
||||
- name: Inspect container with CLI tool
|
||||
ansible.builtin.command:
|
||||
@ -78,8 +78,8 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- start_1 is changed
|
||||
- start_2 is not changed
|
||||
- start_1 is changed
|
||||
- start_2 is not changed
|
||||
|
||||
- name: Inspect container with CLI tool
|
||||
ansible.builtin.command:
|
||||
@ -107,8 +107,8 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- remove_1 is changed
|
||||
- remove_2 is not changed
|
||||
- remove_1 is changed
|
||||
- remove_2 is not changed
|
||||
|
||||
- name: Inspect container with CLI tool
|
||||
ansible.builtin.command:
|
||||
|
||||
@ -13,379 +13,379 @@
|
||||
msg: "Using container names '{{ cname }}' and '{{ cname2 }}', and volume name '{{ vname }}'"
|
||||
|
||||
- block:
|
||||
- name: Get info on Docker host
|
||||
docker_host_info:
|
||||
register: output
|
||||
- name: Get info on Docker host
|
||||
docker_host_info:
|
||||
register: output
|
||||
|
||||
- name: assert reading docker host facts when docker is running
|
||||
assert:
|
||||
that:
|
||||
- output.host_info.Name is string
|
||||
- output.containers is not defined
|
||||
- output.networks is not defined
|
||||
- output.volumes is not defined
|
||||
- output.images is not defined
|
||||
- output.disk_usage is not defined
|
||||
- output.can_talk_to_docker is true
|
||||
- name: assert reading docker host facts when docker is running
|
||||
assert:
|
||||
that:
|
||||
- output.host_info.Name is string
|
||||
- output.containers is not defined
|
||||
- output.networks is not defined
|
||||
- output.volumes is not defined
|
||||
- output.images is not defined
|
||||
- output.disk_usage is not defined
|
||||
- output.can_talk_to_docker is true
|
||||
|
||||
- block:
|
||||
- name: Get info on Docker host with invalid api_version
|
||||
docker_host_info:
|
||||
api_version: 1.999.999
|
||||
register: output
|
||||
ignore_errors: true
|
||||
- name: Get info on Docker host with invalid api_version
|
||||
docker_host_info:
|
||||
api_version: 1.999.999
|
||||
register: output
|
||||
ignore_errors: true
|
||||
|
||||
- name: assert can_talk_is_docker is false
|
||||
assert:
|
||||
that:
|
||||
- output is failed
|
||||
- output.can_talk_to_docker is false
|
||||
- name: assert can_talk_is_docker is false
|
||||
assert:
|
||||
that:
|
||||
- output is failed
|
||||
- output.can_talk_to_docker is false
|
||||
|
||||
- block:
|
||||
- name: Get info on Docker host with invalid docker_host
|
||||
docker_host_info:
|
||||
docker_host: tcp://127.0.0.1:80
|
||||
register: output
|
||||
ignore_errors: true
|
||||
- name: Get info on Docker host with invalid docker_host
|
||||
docker_host_info:
|
||||
docker_host: tcp://127.0.0.1:80
|
||||
register: output
|
||||
ignore_errors: true
|
||||
|
||||
- name: assert can_talk_is_docker is false
|
||||
assert:
|
||||
that:
|
||||
- output is failed
|
||||
- output.can_talk_to_docker is false
|
||||
- name: assert can_talk_is_docker is false
|
||||
assert:
|
||||
that:
|
||||
- output is failed
|
||||
- output.can_talk_to_docker is false
|
||||
|
||||
# Container and volume are created so that all lists are non-empty:
|
||||
# * container and volume lists are non-emtpy because of the created objects;
|
||||
# * image list is non-empty because the image of the container is there;
|
||||
# * network list is always non-empty (default networks).
|
||||
- name: Create running container
|
||||
docker_container:
|
||||
image: "{{ docker_test_image_alpine }}"
|
||||
command: '/bin/sh -c "sleep 10m"'
|
||||
name: "{{ cname }}"
|
||||
labels:
|
||||
key1: value1
|
||||
key2: value2
|
||||
state: started
|
||||
register: container_output
|
||||
# Container and volume are created so that all lists are non-empty:
|
||||
# * container and volume lists are non-emtpy because of the created objects;
|
||||
# * image list is non-empty because the image of the container is there;
|
||||
# * network list is always non-empty (default networks).
|
||||
- name: Create running container
|
||||
docker_container:
|
||||
image: "{{ docker_test_image_alpine }}"
|
||||
command: '/bin/sh -c "sleep 10m"'
|
||||
name: "{{ cname }}"
|
||||
labels:
|
||||
key1: value1
|
||||
key2: value2
|
||||
state: started
|
||||
register: container_output
|
||||
|
||||
- name: Create running container
|
||||
docker_container:
|
||||
image: "{{ docker_test_image_alpine }}"
|
||||
name: "{{ cname2 }}"
|
||||
labels:
|
||||
key2: value2
|
||||
key3: value3
|
||||
state: stopped
|
||||
register: container2_output
|
||||
- name: Create running container
|
||||
docker_container:
|
||||
image: "{{ docker_test_image_alpine }}"
|
||||
name: "{{ cname2 }}"
|
||||
labels:
|
||||
key2: value2
|
||||
key3: value3
|
||||
state: stopped
|
||||
register: container2_output
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- container_output is changed
|
||||
- container2_output is changed
|
||||
- assert:
|
||||
that:
|
||||
- container_output is changed
|
||||
- container2_output is changed
|
||||
|
||||
- name: Create a volume
|
||||
docker_volume:
|
||||
name: "{{ vname }}"
|
||||
register: volume_output
|
||||
- name: Create a volume
|
||||
docker_volume:
|
||||
name: "{{ vname }}"
|
||||
register: volume_output
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- volume_output is changed
|
||||
- assert:
|
||||
that:
|
||||
- volume_output is changed
|
||||
|
||||
- name: Get info on Docker host and list containers
|
||||
docker_host_info:
|
||||
containers: true
|
||||
register: output
|
||||
- name: Get info on Docker host and list containers
|
||||
docker_host_info:
|
||||
containers: true
|
||||
register: output
|
||||
|
||||
- name: assert reading docker host facts when docker is running and list containers
|
||||
assert:
|
||||
that:
|
||||
- 'output.host_info.Name is string'
|
||||
- 'output.networks is not defined'
|
||||
- 'output.volumes is not defined'
|
||||
- 'output.images is not defined'
|
||||
- 'output.disk_usage is not defined'
|
||||
- 'output.containers[0].Image is string'
|
||||
- 'output.containers[0].ImageID is not defined'
|
||||
- name: assert reading docker host facts when docker is running and list containers
|
||||
assert:
|
||||
that:
|
||||
- 'output.host_info.Name is string'
|
||||
- 'output.networks is not defined'
|
||||
- 'output.volumes is not defined'
|
||||
- 'output.images is not defined'
|
||||
- 'output.disk_usage is not defined'
|
||||
- 'output.containers[0].Image is string'
|
||||
- 'output.containers[0].ImageID is not defined'
|
||||
|
||||
- name: Get info on Docker host and list containers matching filters (single label)
|
||||
docker_host_info:
|
||||
containers: true
|
||||
containers_filters:
|
||||
label: key1=value1
|
||||
register: output
|
||||
- name: Get info on Docker host and list containers matching filters (single label)
|
||||
docker_host_info:
|
||||
containers: true
|
||||
containers_filters:
|
||||
label: key1=value1
|
||||
register: output
|
||||
|
||||
- name: assert container is returned when filters are matched (single label)
|
||||
assert:
|
||||
that: "output.containers | length == 1"
|
||||
- name: assert container is returned when filters are matched (single label)
|
||||
assert:
|
||||
that: "output.containers | length == 1"
|
||||
|
||||
- name: Get info on Docker host and list containers matching filters (multiple labels)
|
||||
docker_host_info:
|
||||
containers: true
|
||||
containers_filters:
|
||||
label:
|
||||
- key1=value1
|
||||
- key2=value2
|
||||
register: output
|
||||
- name: Get info on Docker host and list containers matching filters (multiple labels)
|
||||
docker_host_info:
|
||||
containers: true
|
||||
containers_filters:
|
||||
label:
|
||||
- key1=value1
|
||||
- key2=value2
|
||||
register: output
|
||||
|
||||
- name: assert container is returned when filters are matched (multiple labels)
|
||||
assert:
|
||||
that: "output.containers | length == 1"
|
||||
- name: assert container is returned when filters are matched (multiple labels)
|
||||
assert:
|
||||
that: "output.containers | length == 1"
|
||||
|
||||
- name: Get info on Docker host and do not list containers which do not match filters
|
||||
docker_host_info:
|
||||
containers: true
|
||||
containers_filters:
|
||||
label:
|
||||
- key1=value1
|
||||
- key2=value2
|
||||
- key3=value3
|
||||
register: output
|
||||
- name: Get info on Docker host and do not list containers which do not match filters
|
||||
docker_host_info:
|
||||
containers: true
|
||||
containers_filters:
|
||||
label:
|
||||
- key1=value1
|
||||
- key2=value2
|
||||
- key3=value3
|
||||
register: output
|
||||
|
||||
- name: assert no container is returned when filters are not matched
|
||||
assert:
|
||||
that: "output.containers | length == 0"
|
||||
- name: assert no container is returned when filters are not matched
|
||||
assert:
|
||||
that: "output.containers | length == 0"
|
||||
|
||||
- name: Get info on Docker host and list containers matching filters (single label, not all containers)
|
||||
docker_host_info:
|
||||
containers: true
|
||||
containers_all: false
|
||||
containers_filters:
|
||||
label: key2=value2
|
||||
register: output
|
||||
- name: Get info on Docker host and list containers matching filters (single label, not all containers)
|
||||
docker_host_info:
|
||||
containers: true
|
||||
containers_all: false
|
||||
containers_filters:
|
||||
label: key2=value2
|
||||
register: output
|
||||
|
||||
- name: Get info on Docker host and list containers matching filters (single label, all containers)
|
||||
docker_host_info:
|
||||
containers: true
|
||||
containers_all: true
|
||||
containers_filters:
|
||||
label: key2=value2
|
||||
register: output_all
|
||||
- name: Get info on Docker host and list containers matching filters (single label, all containers)
|
||||
docker_host_info:
|
||||
containers: true
|
||||
containers_all: true
|
||||
containers_filters:
|
||||
label: key2=value2
|
||||
register: output_all
|
||||
|
||||
- name: assert one resp. two container is returned
|
||||
assert:
|
||||
that:
|
||||
- "output.containers | length == 1"
|
||||
- "output_all.containers | length == 2"
|
||||
- name: assert one resp. two container is returned
|
||||
assert:
|
||||
that:
|
||||
- "output.containers | length == 1"
|
||||
- "output_all.containers | length == 2"
|
||||
|
||||
- name: Get info on Docker host and list containers with verbose output
|
||||
docker_host_info:
|
||||
containers: true
|
||||
verbose_output: true
|
||||
register: output
|
||||
- name: Get info on Docker host and list containers with verbose output
|
||||
docker_host_info:
|
||||
containers: true
|
||||
verbose_output: true
|
||||
register: output
|
||||
|
||||
- name: assert reading docker host facts when docker is running and list containers with verbose output
|
||||
assert:
|
||||
that:
|
||||
- 'output.host_info.Name is string'
|
||||
- 'output.networks is not defined'
|
||||
- 'output.volumes is not defined'
|
||||
- 'output.images is not defined'
|
||||
- 'output.disk_usage is not defined'
|
||||
- 'output.containers[0].Image is string'
|
||||
- 'output.containers[0].ImageID is string'
|
||||
- name: assert reading docker host facts when docker is running and list containers with verbose output
|
||||
assert:
|
||||
that:
|
||||
- 'output.host_info.Name is string'
|
||||
- 'output.networks is not defined'
|
||||
- 'output.volumes is not defined'
|
||||
- 'output.images is not defined'
|
||||
- 'output.disk_usage is not defined'
|
||||
- 'output.containers[0].Image is string'
|
||||
- 'output.containers[0].ImageID is string'
|
||||
|
||||
- name: Get info on Docker host and list images
|
||||
docker_host_info:
|
||||
images: true
|
||||
register: output
|
||||
- name: Get info on Docker host and list images
|
||||
docker_host_info:
|
||||
images: true
|
||||
register: output
|
||||
|
||||
- name: assert reading docker host facts when docker is running and list images
|
||||
assert:
|
||||
that:
|
||||
- 'output.host_info.Name is string'
|
||||
- 'output.containers is not defined'
|
||||
- 'output.networks is not defined'
|
||||
- 'output.volumes is not defined'
|
||||
- 'output.images[0].Id is string'
|
||||
- 'output.images[0].ParentId is not defined'
|
||||
- 'output.disk_usage is not defined'
|
||||
- name: assert reading docker host facts when docker is running and list images
|
||||
assert:
|
||||
that:
|
||||
- 'output.host_info.Name is string'
|
||||
- 'output.containers is not defined'
|
||||
- 'output.networks is not defined'
|
||||
- 'output.volumes is not defined'
|
||||
- 'output.images[0].Id is string'
|
||||
- 'output.images[0].ParentId is not defined'
|
||||
- 'output.disk_usage is not defined'
|
||||
|
||||
- name: Get info on Docker host and list images with verbose output
|
||||
docker_host_info:
|
||||
images: true
|
||||
verbose_output: true
|
||||
register: output
|
||||
- name: Get info on Docker host and list images with verbose output
|
||||
docker_host_info:
|
||||
images: true
|
||||
verbose_output: true
|
||||
register: output
|
||||
|
||||
- name: assert reading docker host facts when docker is running and list images with verbose output
|
||||
assert:
|
||||
that:
|
||||
- 'output.host_info.Name is string'
|
||||
- 'output.containers is not defined'
|
||||
- 'output.networks is not defined'
|
||||
- 'output.volumes is not defined'
|
||||
- 'output.images[0].Id is string'
|
||||
- 'output.images[0].ParentId is string'
|
||||
- 'output.disk_usage is not defined'
|
||||
- name: assert reading docker host facts when docker is running and list images with verbose output
|
||||
assert:
|
||||
that:
|
||||
- 'output.host_info.Name is string'
|
||||
- 'output.containers is not defined'
|
||||
- 'output.networks is not defined'
|
||||
- 'output.volumes is not defined'
|
||||
- 'output.images[0].Id is string'
|
||||
- 'output.images[0].ParentId is string'
|
||||
- 'output.disk_usage is not defined'
|
||||
|
||||
- name: Get info on Docker host and list networks
|
||||
docker_host_info:
|
||||
networks: true
|
||||
register: output
|
||||
- name: Get info on Docker host and list networks
|
||||
docker_host_info:
|
||||
networks: true
|
||||
register: output
|
||||
|
||||
- name: assert reading docker host facts when docker is running and list networks
|
||||
assert:
|
||||
that:
|
||||
- 'output.host_info.Name is string'
|
||||
- 'output.containers is not defined'
|
||||
- 'output.networks[0].Id is string'
|
||||
- 'output.networks[0].Created is not defined'
|
||||
- 'output.volumes is not defined'
|
||||
- 'output.images is not defined'
|
||||
- 'output.disk_usage is not defined'
|
||||
- name: assert reading docker host facts when docker is running and list networks
|
||||
assert:
|
||||
that:
|
||||
- 'output.host_info.Name is string'
|
||||
- 'output.containers is not defined'
|
||||
- 'output.networks[0].Id is string'
|
||||
- 'output.networks[0].Created is not defined'
|
||||
- 'output.volumes is not defined'
|
||||
- 'output.images is not defined'
|
||||
- 'output.disk_usage is not defined'
|
||||
|
||||
- name: Get info on Docker host and list networks with verbose output
|
||||
docker_host_info:
|
||||
networks: true
|
||||
verbose_output: true
|
||||
register: output
|
||||
- name: Get info on Docker host and list networks with verbose output
|
||||
docker_host_info:
|
||||
networks: true
|
||||
verbose_output: true
|
||||
register: output
|
||||
|
||||
- name: assert reading docker host facts when docker is running and list networks with verbose output
|
||||
assert:
|
||||
that:
|
||||
- 'output.host_info.Name is string'
|
||||
- 'output.containers is not defined'
|
||||
- 'output.networks[0].Id is string'
|
||||
- 'output.networks[0].Created is string'
|
||||
- 'output.volumes is not defined'
|
||||
- 'output.images is not defined'
|
||||
- 'output.disk_usage is not defined'
|
||||
- name: assert reading docker host facts when docker is running and list networks with verbose output
|
||||
assert:
|
||||
that:
|
||||
- 'output.host_info.Name is string'
|
||||
- 'output.containers is not defined'
|
||||
- 'output.networks[0].Id is string'
|
||||
- 'output.networks[0].Created is string'
|
||||
- 'output.volumes is not defined'
|
||||
- 'output.images is not defined'
|
||||
- 'output.disk_usage is not defined'
|
||||
|
||||
- name: Get info on Docker host and list volumes
|
||||
docker_host_info:
|
||||
volumes: true
|
||||
register: output
|
||||
- name: Get info on Docker host and list volumes
|
||||
docker_host_info:
|
||||
volumes: true
|
||||
register: output
|
||||
|
||||
- name: assert reading docker host facts when docker is running and list volumes
|
||||
assert:
|
||||
that:
|
||||
- 'output.host_info.Name is string'
|
||||
- 'output.containers is not defined'
|
||||
- 'output.networks is not defined'
|
||||
- 'output.volumes[0].Name is string'
|
||||
- 'output.volumes[0].Mountpoint is not defined'
|
||||
- 'output.images is not defined'
|
||||
- 'output.disk_usage is not defined'
|
||||
- name: assert reading docker host facts when docker is running and list volumes
|
||||
assert:
|
||||
that:
|
||||
- 'output.host_info.Name is string'
|
||||
- 'output.containers is not defined'
|
||||
- 'output.networks is not defined'
|
||||
- 'output.volumes[0].Name is string'
|
||||
- 'output.volumes[0].Mountpoint is not defined'
|
||||
- 'output.images is not defined'
|
||||
- 'output.disk_usage is not defined'
|
||||
|
||||
- name: Get info on Docker host and list volumes with verbose output
|
||||
docker_host_info:
|
||||
volumes: true
|
||||
verbose_output: true
|
||||
register: output
|
||||
- name: Get info on Docker host and list volumes with verbose output
|
||||
docker_host_info:
|
||||
volumes: true
|
||||
verbose_output: true
|
||||
register: output
|
||||
|
||||
- name: assert reading docker host facts when docker is running and list volumes with verbose output
|
||||
assert:
|
||||
that:
|
||||
- 'output.host_info.Name is string'
|
||||
- 'output.containers is not defined'
|
||||
- 'output.networks is not defined'
|
||||
- 'output.volumes[0].Name is string'
|
||||
- 'output.volumes[0].Mountpoint is string'
|
||||
- 'output.images is not defined'
|
||||
- 'output.disk_usage is not defined'
|
||||
- name: assert reading docker host facts when docker is running and list volumes with verbose output
|
||||
assert:
|
||||
that:
|
||||
- 'output.host_info.Name is string'
|
||||
- 'output.containers is not defined'
|
||||
- 'output.networks is not defined'
|
||||
- 'output.volumes[0].Name is string'
|
||||
- 'output.volumes[0].Mountpoint is string'
|
||||
- 'output.images is not defined'
|
||||
- 'output.disk_usage is not defined'
|
||||
|
||||
- name: Get info on Docker host and get disk usage
|
||||
docker_host_info:
|
||||
disk_usage: true
|
||||
register: output
|
||||
- name: Get info on Docker host and get disk usage
|
||||
docker_host_info:
|
||||
disk_usage: true
|
||||
register: output
|
||||
|
||||
- name: assert reading docker host facts when docker is running and get disk usage
|
||||
assert:
|
||||
that:
|
||||
- 'output.host_info.Name is string'
|
||||
- 'output.containers is not defined'
|
||||
- 'output.networks is not defined'
|
||||
- 'output.volumes is not defined'
|
||||
- 'output.images is not defined'
|
||||
- 'output.disk_usage.LayersSize is number'
|
||||
- 'output.disk_usage.Images is not defined'
|
||||
- 'output.disk_usage.Containers is not defined'
|
||||
- 'output.disk_usage.Volumes is not defined'
|
||||
- name: assert reading docker host facts when docker is running and get disk usage
|
||||
assert:
|
||||
that:
|
||||
- 'output.host_info.Name is string'
|
||||
- 'output.containers is not defined'
|
||||
- 'output.networks is not defined'
|
||||
- 'output.volumes is not defined'
|
||||
- 'output.images is not defined'
|
||||
- 'output.disk_usage.LayersSize is number'
|
||||
- 'output.disk_usage.Images is not defined'
|
||||
- 'output.disk_usage.Containers is not defined'
|
||||
- 'output.disk_usage.Volumes is not defined'
|
||||
|
||||
- name: Get info on Docker host and get disk usage with verbose output
|
||||
docker_host_info:
|
||||
disk_usage: true
|
||||
verbose_output: true
|
||||
register: output
|
||||
- name: Get info on Docker host and get disk usage with verbose output
|
||||
docker_host_info:
|
||||
disk_usage: true
|
||||
verbose_output: true
|
||||
register: output
|
||||
|
||||
- name: assert reading docker host facts when docker is running and get disk usage with verbose output
|
||||
assert:
|
||||
that:
|
||||
- 'output.host_info.Name is string'
|
||||
- 'output.containers is not defined'
|
||||
- 'output.networks is not defined'
|
||||
- 'output.volumes is not defined'
|
||||
- 'output.images is not defined'
|
||||
- 'output.disk_usage.LayersSize is number'
|
||||
- 'output.disk_usage.Images is sequence'
|
||||
- 'output.disk_usage.Containers is sequence'
|
||||
- 'output.disk_usage.Volumes is sequence'
|
||||
- name: assert reading docker host facts when docker is running and get disk usage with verbose output
|
||||
assert:
|
||||
that:
|
||||
- 'output.host_info.Name is string'
|
||||
- 'output.containers is not defined'
|
||||
- 'output.networks is not defined'
|
||||
- 'output.volumes is not defined'
|
||||
- 'output.images is not defined'
|
||||
- 'output.disk_usage.LayersSize is number'
|
||||
- 'output.disk_usage.Images is sequence'
|
||||
- 'output.disk_usage.Containers is sequence'
|
||||
- 'output.disk_usage.Volumes is sequence'
|
||||
|
||||
- name: Get info on Docker host, disk usage and get all lists together
|
||||
docker_host_info:
|
||||
volumes: true
|
||||
containers: true
|
||||
networks: true
|
||||
images: true
|
||||
disk_usage: true
|
||||
register: output
|
||||
- name: Get info on Docker host, disk usage and get all lists together
|
||||
docker_host_info:
|
||||
volumes: true
|
||||
containers: true
|
||||
networks: true
|
||||
images: true
|
||||
disk_usage: true
|
||||
register: output
|
||||
|
||||
- name: assert reading docker host facts when docker is running, disk usage and get lists together
|
||||
assert:
|
||||
that:
|
||||
- 'output.host_info.Name is string'
|
||||
- 'output.containers[0].Image is string'
|
||||
- 'output.containers[0].ImageID is not defined'
|
||||
- 'output.networks[0].Id is string'
|
||||
- 'output.networks[0].Created is not defined'
|
||||
- 'output.volumes[0].Name is string'
|
||||
- 'output.volumes[0].Mountpoint is not defined'
|
||||
- 'output.images[0].Id is string'
|
||||
- 'output.images[0].ParentId is not defined'
|
||||
- 'output.disk_usage.LayersSize is number'
|
||||
- 'output.disk_usage.Images is not defined'
|
||||
- 'output.disk_usage.Containers is not defined'
|
||||
- 'output.disk_usage.Volumes is not defined'
|
||||
- name: assert reading docker host facts when docker is running, disk usage and get lists together
|
||||
assert:
|
||||
that:
|
||||
- 'output.host_info.Name is string'
|
||||
- 'output.containers[0].Image is string'
|
||||
- 'output.containers[0].ImageID is not defined'
|
||||
- 'output.networks[0].Id is string'
|
||||
- 'output.networks[0].Created is not defined'
|
||||
- 'output.volumes[0].Name is string'
|
||||
- 'output.volumes[0].Mountpoint is not defined'
|
||||
- 'output.images[0].Id is string'
|
||||
- 'output.images[0].ParentId is not defined'
|
||||
- 'output.disk_usage.LayersSize is number'
|
||||
- 'output.disk_usage.Images is not defined'
|
||||
- 'output.disk_usage.Containers is not defined'
|
||||
- 'output.disk_usage.Volumes is not defined'
|
||||
|
||||
- name: Get info on Docker host, disk usage and get all lists together with verbose output
|
||||
docker_host_info:
|
||||
volumes: true
|
||||
containers: true
|
||||
networks: true
|
||||
images: true
|
||||
disk_usage: true
|
||||
verbose_output: true
|
||||
register: output
|
||||
- name: Get info on Docker host, disk usage and get all lists together with verbose output
|
||||
docker_host_info:
|
||||
volumes: true
|
||||
containers: true
|
||||
networks: true
|
||||
images: true
|
||||
disk_usage: true
|
||||
verbose_output: true
|
||||
register: output
|
||||
|
||||
- name: assert reading docker host facts when docker is running and get disk usage with verbose output
|
||||
assert:
|
||||
that:
|
||||
- 'output.host_info.Name is string'
|
||||
- 'output.containers[0].Image is string'
|
||||
- 'output.containers[0].ImageID is string'
|
||||
- 'output.networks[0].Id is string'
|
||||
- 'output.networks[0].Created is string'
|
||||
- 'output.volumes[0].Name is string'
|
||||
- 'output.volumes[0].Mountpoint is string'
|
||||
- 'output.images[0].Id is string'
|
||||
- 'output.images[0].ParentId is string'
|
||||
- 'output.disk_usage.LayersSize is number'
|
||||
- 'output.disk_usage.Images is sequence'
|
||||
- 'output.disk_usage.Containers is sequence'
|
||||
- 'output.disk_usage.Volumes is sequence'
|
||||
- name: assert reading docker host facts when docker is running and get disk usage with verbose output
|
||||
assert:
|
||||
that:
|
||||
- 'output.host_info.Name is string'
|
||||
- 'output.containers[0].Image is string'
|
||||
- 'output.containers[0].ImageID is string'
|
||||
- 'output.networks[0].Id is string'
|
||||
- 'output.networks[0].Created is string'
|
||||
- 'output.volumes[0].Name is string'
|
||||
- 'output.volumes[0].Mountpoint is string'
|
||||
- 'output.images[0].Id is string'
|
||||
- 'output.images[0].ParentId is string'
|
||||
- 'output.disk_usage.LayersSize is number'
|
||||
- 'output.disk_usage.Images is sequence'
|
||||
- 'output.disk_usage.Containers is sequence'
|
||||
- 'output.disk_usage.Volumes is sequence'
|
||||
|
||||
always:
|
||||
- name: Delete containers
|
||||
docker_container:
|
||||
name: "{{ item }}"
|
||||
state: absent
|
||||
force_kill: true
|
||||
loop:
|
||||
- "{{ cname }}"
|
||||
- "{{ cname2 }}"
|
||||
- name: Delete containers
|
||||
docker_container:
|
||||
name: "{{ item }}"
|
||||
state: absent
|
||||
force_kill: true
|
||||
loop:
|
||||
- "{{ cname }}"
|
||||
- "{{ cname2 }}"
|
||||
|
||||
- name: Delete volume
|
||||
docker_volume:
|
||||
name: "{{ vname }}"
|
||||
state: absent
|
||||
- name: Delete volume
|
||||
docker_volume:
|
||||
name: "{{ vname }}"
|
||||
state: absent
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- absent_2 is not changed
|
||||
- absent_2 is not changed
|
||||
|
||||
- name: Make sure image is there
|
||||
docker_image:
|
||||
@ -44,8 +44,8 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- present_1 is changed
|
||||
- present_2 is not changed
|
||||
- present_1 is changed
|
||||
- present_2 is not changed
|
||||
|
||||
- name: Make sure tag is not there
|
||||
docker_image:
|
||||
@ -83,10 +83,10 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- tag_1 is changed
|
||||
- tag_2 is not changed
|
||||
- tag_3 is not changed
|
||||
- tag_4 is not changed
|
||||
- tag_1 is changed
|
||||
- tag_2 is not changed
|
||||
- tag_3 is not changed
|
||||
- tag_4 is not changed
|
||||
|
||||
- name: Cleanup alias tag
|
||||
docker_image:
|
||||
@ -129,11 +129,11 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- fail_1 is failed
|
||||
- "'`repository` must not be an image ID' in fail_1.msg"
|
||||
- fail_2 is failed
|
||||
- "'Cannot push an image by ID' in fail_2.msg"
|
||||
- fail_3 is failed
|
||||
- "'Image name must not be an image ID for source=pull' in fail_3.msg"
|
||||
- fail_4 is failed
|
||||
- "'Image name must not be an image ID for source=build' in fail_4.msg"
|
||||
- fail_1 is failed
|
||||
- "'`repository` must not be an image ID' in fail_1.msg"
|
||||
- fail_2 is failed
|
||||
- "'Cannot push an image by ID' in fail_2.msg"
|
||||
- fail_3 is failed
|
||||
- "'Image name must not be an image ID for source=pull' in fail_3.msg"
|
||||
- fail_4 is failed
|
||||
- "'Image name must not be an image ID for source=build' in fail_4.msg"
|
||||
|
||||
@ -61,9 +61,9 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- push_1 is changed
|
||||
- push_2 is not changed
|
||||
- push_3 is not changed
|
||||
- push_1 is changed
|
||||
- push_2 is not changed
|
||||
- push_3 is not changed
|
||||
|
||||
- name: Get facts of local image
|
||||
docker_image_info:
|
||||
@ -102,11 +102,11 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- pull_1 is changed
|
||||
- pull_2 is not changed
|
||||
- facts_1.images | length == 1
|
||||
- facts_2.images | length == 0
|
||||
- facts_3.images | length == 1
|
||||
- pull_1 is changed
|
||||
- pull_2 is not changed
|
||||
- facts_1.images | length == 1
|
||||
- facts_2.images | length == 0
|
||||
- facts_3.images | length == 1
|
||||
|
||||
- name: Pull image from test registry (with digest)
|
||||
docker_image:
|
||||
@ -148,8 +148,8 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- push_1_different is changed
|
||||
- push_2_different is not changed
|
||||
- push_1_different is changed
|
||||
- push_2_different is not changed
|
||||
|
||||
- name: Tag same image with new tag
|
||||
docker_image:
|
||||
@ -178,24 +178,24 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
# NOTE: This should be:
|
||||
# - push_1_same is changed
|
||||
# Unfortunately docker does *NOT* report whether the tag already existed or not.
|
||||
# Here are the logs returned by client.push() for both tasks (which are exactly the same):
|
||||
# push_1_same:
|
||||
# {"status": "The push refers to repository [localhost:32796/test/hello-world]"},
|
||||
# {"id": "3fc64803ca2d", "progressDetail": {}, "status": "Preparing"},
|
||||
# {"id": "3fc64803ca2d", "progressDetail": {}, "status": "Layer already exists"},
|
||||
# {"status": "newtag2: digest: sha256:92251458088c638061cda8fd8b403b76d661a4dc6b7ee71b6affcf1872557b2b size: 528"},
|
||||
# {"aux": {"Digest": "sha256:92251458088c638061cda8fd8b403b76d661a4dc6b7ee71b6affcf1872557b2b", "Size": 528, "Tag": "newtag2"}, "progressDetail": {}}
|
||||
# push_2_same:
|
||||
# {"status": "The push refers to repository [localhost:32796/test/hello-world]"},
|
||||
# {"id": "3fc64803ca2d", "progressDetail": {}, "status": "Preparing"},
|
||||
# {"id": "3fc64803ca2d", "progressDetail": {}, "status": "Layer already exists"},
|
||||
# {"status": "newtag2: digest: sha256:92251458088c638061cda8fd8b403b76d661a4dc6b7ee71b6affcf1872557b2b size: 528"},
|
||||
# {"aux": {"Digest": "sha256:92251458088c638061cda8fd8b403b76d661a4dc6b7ee71b6affcf1872557b2b", "Size": 528, "Tag": "newtag2"}, "progressDetail": {}}
|
||||
- push_1_same is not changed
|
||||
- push_2_same is not changed
|
||||
# NOTE: This should be:
|
||||
# - push_1_same is changed
|
||||
# Unfortunately docker does *NOT* report whether the tag already existed or not.
|
||||
# Here are the logs returned by client.push() for both tasks (which are exactly the same):
|
||||
# push_1_same:
|
||||
# {"status": "The push refers to repository [localhost:32796/test/hello-world]"},
|
||||
# {"id": "3fc64803ca2d", "progressDetail": {}, "status": "Preparing"},
|
||||
# {"id": "3fc64803ca2d", "progressDetail": {}, "status": "Layer already exists"},
|
||||
# {"status": "newtag2: digest: sha256:92251458088c638061cda8fd8b403b76d661a4dc6b7ee71b6affcf1872557b2b size: 528"},
|
||||
# {"aux": {"Digest": "sha256:92251458088c638061cda8fd8b403b76d661a4dc6b7ee71b6affcf1872557b2b", "Size": 528, "Tag": "newtag2"}, "progressDetail": {}}
|
||||
# push_2_same:
|
||||
# {"status": "The push refers to repository [localhost:32796/test/hello-world]"},
|
||||
# {"id": "3fc64803ca2d", "progressDetail": {}, "status": "Preparing"},
|
||||
# {"id": "3fc64803ca2d", "progressDetail": {}, "status": "Layer already exists"},
|
||||
# {"status": "newtag2: digest: sha256:92251458088c638061cda8fd8b403b76d661a4dc6b7ee71b6affcf1872557b2b size: 528"},
|
||||
# {"aux": {"Digest": "sha256:92251458088c638061cda8fd8b403b76d661a4dc6b7ee71b6affcf1872557b2b", "Size": 528, "Tag": "newtag2"}, "progressDetail": {}}
|
||||
- push_1_same is not changed
|
||||
- push_2_same is not changed
|
||||
|
||||
####################################################################
|
||||
## repository ######################################################
|
||||
@ -241,10 +241,10 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- repository_1 is changed
|
||||
- repository_2 is not changed
|
||||
- repository_3 is changed
|
||||
- repository_4 is not changed
|
||||
- repository_1 is changed
|
||||
- repository_2 is not changed
|
||||
- repository_3 is changed
|
||||
- repository_4 is not changed
|
||||
|
||||
- name: Get facts of image
|
||||
docker_image_info:
|
||||
@ -259,4 +259,4 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- facts_1.images | length == 1
|
||||
- facts_1.images | length == 1
|
||||
|
||||
@ -63,8 +63,8 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- buildargs_1 is changed
|
||||
- buildargs_2 is not failed and buildargs_2 is not changed
|
||||
- buildargs_1 is changed
|
||||
- buildargs_2 is not failed and buildargs_2 is not changed
|
||||
|
||||
####################################################################
|
||||
## build.container_limits ##########################################
|
||||
@ -102,14 +102,14 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
# It *sometimes* happens that the first task does not fail.
|
||||
# For now, we work around this by
|
||||
# a) requiring that if it fails, the message must
|
||||
# contain 'Minimum memory limit allowed is (4|6)MB', and
|
||||
# b) requiring that either the first task, or the second
|
||||
# task is changed, but not both.
|
||||
- "not container_limits_1 is failed or ('Minimum memory limit allowed is ') in container_limits_1.msg"
|
||||
- "container_limits_1 is changed or container_limits_2 is changed and not (container_limits_1 is changed and container_limits_2 is changed)"
|
||||
# It *sometimes* happens that the first task does not fail.
|
||||
# For now, we work around this by
|
||||
# a) requiring that if it fails, the message must
|
||||
# contain 'Minimum memory limit allowed is (4|6)MB', and
|
||||
# b) requiring that either the first task, or the second
|
||||
# task is changed, but not both.
|
||||
- "not container_limits_1 is failed or ('Minimum memory limit allowed is ') in container_limits_1.msg"
|
||||
- "container_limits_1 is changed or container_limits_2 is changed and not (container_limits_1 is changed and container_limits_2 is changed)"
|
||||
|
||||
####################################################################
|
||||
## build.dockerfile ################################################
|
||||
@ -133,9 +133,9 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- dockerfile_1 is changed
|
||||
- "('FROM ' ~ docker_test_image_alpine) in dockerfile_1.stdout"
|
||||
- dockerfile_1['image']['Config']['WorkingDir'] == '/newdata'
|
||||
- dockerfile_1 is changed
|
||||
- "('FROM ' ~ docker_test_image_alpine) in dockerfile_1.stdout"
|
||||
- dockerfile_1['image']['Config']['WorkingDir'] == '/newdata'
|
||||
|
||||
####################################################################
|
||||
## build.platform ##################################################
|
||||
@ -177,8 +177,8 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- platform_1 is changed
|
||||
- platform_2 is not failed and platform_2 is not changed
|
||||
- platform_1 is changed
|
||||
- platform_2 is not failed and platform_2 is not changed
|
||||
|
||||
####################################################################
|
||||
## force ###########################################################
|
||||
@ -222,8 +222,8 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- force_1 is changed
|
||||
- force_2 is not changed
|
||||
- force_1 is changed
|
||||
- force_2 is not changed
|
||||
|
||||
####################################################################
|
||||
## load path #######################################################
|
||||
@ -350,15 +350,15 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- load_image is changed
|
||||
- archive_image['image']['Id'] == load_image['image']['Id']
|
||||
- load_image_1 is not changed
|
||||
- load_image_2 is failed
|
||||
- >-
|
||||
("The archive did not contain image 'foo:bar'. Instead, found '" ~ docker_test_image_hello_world ~ "'.") == load_image_2.msg
|
||||
- load_image_3 is failed
|
||||
- '"Detected no loaded images. Archive potentially corrupt?" == load_image_3.msg'
|
||||
- load_image_4 is not changed
|
||||
- load_image is changed
|
||||
- archive_image['image']['Id'] == load_image['image']['Id']
|
||||
- load_image_1 is not changed
|
||||
- load_image_2 is failed
|
||||
- >-
|
||||
("The archive did not contain image 'foo:bar'. Instead, found '" ~ docker_test_image_hello_world ~ "'.") == load_image_2.msg
|
||||
- load_image_3 is failed
|
||||
- '"Detected no loaded images. Archive potentially corrupt?" == load_image_3.msg'
|
||||
- load_image_4 is not changed
|
||||
|
||||
####################################################################
|
||||
## build.path ######################################################
|
||||
@ -416,8 +416,8 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- dockerfile_2 is changed
|
||||
- dockerfile_2.image.Config.WorkingDir == '/first'
|
||||
- dockerfile_2 is changed
|
||||
- dockerfile_2.image.Config.WorkingDir == '/first'
|
||||
|
||||
####################################################################
|
||||
## build.etc_hosts #################################################
|
||||
|
||||
@ -51,8 +51,8 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- buildargs_1 is changed
|
||||
- buildargs_2 is not changed
|
||||
- buildargs_1 is changed
|
||||
- buildargs_2 is not changed
|
||||
|
||||
####################################################################
|
||||
## dockerfile ######################################################
|
||||
@ -72,9 +72,9 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- dockerfile_1 is changed
|
||||
- "('FROM ' ~ docker_test_image_alpine) in dockerfile_1.stderr"
|
||||
- dockerfile_1['image']['Config']['WorkingDir'] == '/newdata'
|
||||
- dockerfile_1 is changed
|
||||
- "('FROM ' ~ docker_test_image_alpine) in dockerfile_1.stderr"
|
||||
- dockerfile_1['image']['Config']['WorkingDir'] == '/newdata'
|
||||
|
||||
####################################################################
|
||||
## platform ########################################################
|
||||
@ -106,8 +106,8 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- platform_1 is changed
|
||||
- platform_2 is not changed
|
||||
- platform_1 is changed
|
||||
- platform_2 is not changed
|
||||
|
||||
####################################################################
|
||||
## target ##########################################################
|
||||
@ -128,8 +128,8 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- dockerfile_2 is changed
|
||||
- dockerfile_2.image.Config.WorkingDir == '/first'
|
||||
- dockerfile_2 is changed
|
||||
- dockerfile_2.image.Config.WorkingDir == '/first'
|
||||
|
||||
####################################################################
|
||||
## etc_hosts #######################################################
|
||||
|
||||
@ -9,50 +9,50 @@
|
||||
####################################################################
|
||||
|
||||
- block:
|
||||
- name: Make sure image is not there
|
||||
docker_image_remove:
|
||||
name: "{{ docker_test_image_alpine_different }}"
|
||||
- name: Make sure image is not there
|
||||
docker_image_remove:
|
||||
name: "{{ docker_test_image_alpine_different }}"
|
||||
|
||||
- name: Inspect a non-available image
|
||||
docker_image_info:
|
||||
name: "{{ docker_test_image_alpine_different }}"
|
||||
register: result
|
||||
- name: Inspect a non-available image
|
||||
docker_image_info:
|
||||
name: "{{ docker_test_image_alpine_different }}"
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- "result.images|length == 0"
|
||||
- assert:
|
||||
that:
|
||||
- "result.images|length == 0"
|
||||
|
||||
- name: Make sure images are there
|
||||
docker_image_pull:
|
||||
name: "{{ item }}"
|
||||
loop:
|
||||
- "{{ docker_test_image_hello_world }}"
|
||||
- "{{ docker_test_image_alpine }}"
|
||||
- name: Make sure images are there
|
||||
docker_image_pull:
|
||||
name: "{{ item }}"
|
||||
loop:
|
||||
- "{{ docker_test_image_hello_world }}"
|
||||
- "{{ docker_test_image_alpine }}"
|
||||
|
||||
- name: Inspect an available image
|
||||
docker_image_info:
|
||||
name: "{{ docker_test_image_hello_world }}"
|
||||
register: result
|
||||
- name: Inspect an available image
|
||||
docker_image_info:
|
||||
name: "{{ docker_test_image_hello_world }}"
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- "result.images|length == 1"
|
||||
- "docker_test_image_hello_world in result.images[0].RepoTags"
|
||||
- assert:
|
||||
that:
|
||||
- "result.images|length == 1"
|
||||
- "docker_test_image_hello_world in result.images[0].RepoTags"
|
||||
|
||||
- name: Inspect multiple images
|
||||
docker_image_info:
|
||||
name:
|
||||
- "{{ docker_test_image_hello_world }}"
|
||||
- "{{ docker_test_image_alpine }}"
|
||||
register: result
|
||||
- name: Inspect multiple images
|
||||
docker_image_info:
|
||||
name:
|
||||
- "{{ docker_test_image_hello_world }}"
|
||||
- "{{ docker_test_image_alpine }}"
|
||||
register: result
|
||||
|
||||
- debug: var=result
|
||||
- debug: var=result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- "result.images|length == 2"
|
||||
- "docker_test_image_hello_world in result.images[0].RepoTags"
|
||||
- "docker_test_image_alpine in result.images[1].RepoTags"
|
||||
- assert:
|
||||
that:
|
||||
- "result.images|length == 2"
|
||||
- "docker_test_image_hello_world in result.images[0].RepoTags"
|
||||
- "docker_test_image_alpine in result.images[1].RepoTags"
|
||||
|
||||
when: docker_api_version is version('1.25', '>=')
|
||||
|
||||
|
||||
@ -117,55 +117,55 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- present_1_check is changed
|
||||
- present_1_check.actions | length == 1
|
||||
- present_1_check.actions[0] == ('Pulled image ' ~ image_name)
|
||||
- present_1_check.diff.before.exists is false
|
||||
- present_1_check.diff.after.id == 'unknown'
|
||||
- present_1 is changed
|
||||
- present_1.actions | length == 1
|
||||
- present_1.actions[0] == ('Pulled image ' ~ image_name)
|
||||
- present_1.diff.before.exists is false
|
||||
- present_1.diff.after.id is string
|
||||
- present_2_check is changed
|
||||
- present_2_check.actions | length == 1
|
||||
- present_2_check.actions[0] == ('Pulled image ' ~ image_name)
|
||||
- present_2_check.diff.before.id == present_1.diff.after.id
|
||||
- present_2_check.diff.after.id == 'unknown'
|
||||
- present_2 is not changed
|
||||
- present_2.actions | length == 1
|
||||
- present_2.actions[0] == ('Pulled image ' ~ image_name)
|
||||
- present_2.diff.before.id == present_1.diff.after.id
|
||||
- present_2.diff.after.id == present_1.diff.after.id
|
||||
- present_3_check is changed
|
||||
- present_3_check.actions | length == 1
|
||||
- present_3_check.actions[0] == ('Pulled image ' ~ image_name)
|
||||
- present_3_check.diff.before.id == present_1.diff.after.id
|
||||
- present_3_check.diff.after.id == 'unknown'
|
||||
- present_3 is changed
|
||||
- present_3.actions | length == 1
|
||||
- present_3.actions[0] == ('Pulled image ' ~ image_name)
|
||||
- present_3.diff.before.id == present_1.diff.after.id
|
||||
- present_3.diff.after.id != present_1.diff.after.id
|
||||
- present_3.diff.after.id is string
|
||||
- present_4_check is not changed
|
||||
- present_4_check.actions | length == 0
|
||||
- present_4_check.diff.before.id == present_3.diff.after.id
|
||||
- present_4_check.diff.after.id == present_3.diff.after.id
|
||||
- present_4 is not changed
|
||||
- present_4.actions | length == 0
|
||||
- present_4.diff.before.id == present_3.diff.after.id
|
||||
- present_4.diff.after.id == present_3.diff.after.id
|
||||
- present_5_check is changed
|
||||
- present_5_check.actions | length == 1
|
||||
- present_5_check.actions[0] == ('Pulled image ' ~ image_name)
|
||||
- present_5_check.diff.before.id == present_3.diff.after.id
|
||||
- present_5_check.diff.after.id == 'unknown'
|
||||
- present_5 is changed
|
||||
- present_5.actions | length == 1
|
||||
- present_5.actions[0] == ('Pulled image ' ~ image_name)
|
||||
- present_5.diff.before.id == present_3.diff.after.id
|
||||
- present_5.diff.after.id == present_1.diff.after.id
|
||||
- present_1_check is changed
|
||||
- present_1_check.actions | length == 1
|
||||
- present_1_check.actions[0] == ('Pulled image ' ~ image_name)
|
||||
- present_1_check.diff.before.exists is false
|
||||
- present_1_check.diff.after.id == 'unknown'
|
||||
- present_1 is changed
|
||||
- present_1.actions | length == 1
|
||||
- present_1.actions[0] == ('Pulled image ' ~ image_name)
|
||||
- present_1.diff.before.exists is false
|
||||
- present_1.diff.after.id is string
|
||||
- present_2_check is changed
|
||||
- present_2_check.actions | length == 1
|
||||
- present_2_check.actions[0] == ('Pulled image ' ~ image_name)
|
||||
- present_2_check.diff.before.id == present_1.diff.after.id
|
||||
- present_2_check.diff.after.id == 'unknown'
|
||||
- present_2 is not changed
|
||||
- present_2.actions | length == 1
|
||||
- present_2.actions[0] == ('Pulled image ' ~ image_name)
|
||||
- present_2.diff.before.id == present_1.diff.after.id
|
||||
- present_2.diff.after.id == present_1.diff.after.id
|
||||
- present_3_check is changed
|
||||
- present_3_check.actions | length == 1
|
||||
- present_3_check.actions[0] == ('Pulled image ' ~ image_name)
|
||||
- present_3_check.diff.before.id == present_1.diff.after.id
|
||||
- present_3_check.diff.after.id == 'unknown'
|
||||
- present_3 is changed
|
||||
- present_3.actions | length == 1
|
||||
- present_3.actions[0] == ('Pulled image ' ~ image_name)
|
||||
- present_3.diff.before.id == present_1.diff.after.id
|
||||
- present_3.diff.after.id != present_1.diff.after.id
|
||||
- present_3.diff.after.id is string
|
||||
- present_4_check is not changed
|
||||
- present_4_check.actions | length == 0
|
||||
- present_4_check.diff.before.id == present_3.diff.after.id
|
||||
- present_4_check.diff.after.id == present_3.diff.after.id
|
||||
- present_4 is not changed
|
||||
- present_4.actions | length == 0
|
||||
- present_4.diff.before.id == present_3.diff.after.id
|
||||
- present_4.diff.after.id == present_3.diff.after.id
|
||||
- present_5_check is changed
|
||||
- present_5_check.actions | length == 1
|
||||
- present_5_check.actions[0] == ('Pulled image ' ~ image_name)
|
||||
- present_5_check.diff.before.id == present_3.diff.after.id
|
||||
- present_5_check.diff.after.id == 'unknown'
|
||||
- present_5 is changed
|
||||
- present_5.actions | length == 1
|
||||
- present_5.actions[0] == ('Pulled image ' ~ image_name)
|
||||
- present_5.diff.before.id == present_3.diff.after.id
|
||||
- present_5.diff.after.id == present_1.diff.after.id
|
||||
|
||||
always:
|
||||
- name: cleanup
|
||||
@ -188,9 +188,9 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- fail_1 is failed
|
||||
- >-
|
||||
'Cannot pull an image by ID' == fail_1.msg
|
||||
- fail_2 is failed
|
||||
- >-
|
||||
'"foo/bar" is not a valid docker tag!' == fail_2.msg
|
||||
- fail_1 is failed
|
||||
- >-
|
||||
'Cannot pull an image by ID' == fail_1.msg
|
||||
- fail_2 is failed
|
||||
- >-
|
||||
'"foo/bar" is not a valid docker tag!' == fail_2.msg
|
||||
|
||||
@ -35,20 +35,20 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- present_1 is changed
|
||||
- present_1.actions | length == 1
|
||||
- present_1.actions[0] == ('Pulled image ' ~ docker_test_image_digest_base ~ ':sha256:' ~ docker_test_image_digest_v1)
|
||||
- present_1.diff.before.exists is false
|
||||
- present_1.diff.after.id is string
|
||||
- present_2 is not changed
|
||||
- present_2.actions | length == 1
|
||||
- present_2.actions[0] == ('Pulled image ' ~ docker_test_image_digest_base ~ ':sha256:' ~ docker_test_image_digest_v1)
|
||||
- present_2.diff.before.id == present_1.diff.after.id
|
||||
- present_2.diff.after.id == present_1.diff.after.id
|
||||
- present_3 is not changed
|
||||
- present_3.actions | length == 0
|
||||
- present_3.diff.before.id == present_1.diff.after.id
|
||||
- present_3.diff.after.id == present_1.diff.after.id
|
||||
- present_1 is changed
|
||||
- present_1.actions | length == 1
|
||||
- present_1.actions[0] == ('Pulled image ' ~ docker_test_image_digest_base ~ ':sha256:' ~ docker_test_image_digest_v1)
|
||||
- present_1.diff.before.exists is false
|
||||
- present_1.diff.after.id is string
|
||||
- present_2 is not changed
|
||||
- present_2.actions | length == 1
|
||||
- present_2.actions[0] == ('Pulled image ' ~ docker_test_image_digest_base ~ ':sha256:' ~ docker_test_image_digest_v1)
|
||||
- present_2.diff.before.id == present_1.diff.after.id
|
||||
- present_2.diff.after.id == present_1.diff.after.id
|
||||
- present_3 is not changed
|
||||
- present_3.actions | length == 0
|
||||
- present_3.diff.before.id == present_1.diff.after.id
|
||||
- present_3.diff.after.id == present_1.diff.after.id
|
||||
|
||||
- name: Pull image 2 (check mode)
|
||||
docker_image_pull:
|
||||
@ -67,17 +67,17 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- present_4 is changed
|
||||
- present_4.actions | length == 1
|
||||
- present_4.actions[0] == ('Pulled image ' ~ docker_test_image_digest_base ~ ':sha256:' ~ docker_test_image_digest_v2)
|
||||
- present_4.diff.before.exists is false
|
||||
- present_4.diff.after.id == 'unknown'
|
||||
- present_5 is changed
|
||||
- present_5.actions | length == 1
|
||||
- present_5.actions[0] == ('Pulled image ' ~ docker_test_image_digest_base ~ ':sha256:' ~ docker_test_image_digest_v2)
|
||||
- present_5.diff.before.exists is false
|
||||
- present_5.diff.after.id != present_1.diff.after.id
|
||||
- present_5.diff.after.id is string
|
||||
- present_4 is changed
|
||||
- present_4.actions | length == 1
|
||||
- present_4.actions[0] == ('Pulled image ' ~ docker_test_image_digest_base ~ ':sha256:' ~ docker_test_image_digest_v2)
|
||||
- present_4.diff.before.exists is false
|
||||
- present_4.diff.after.id == 'unknown'
|
||||
- present_5 is changed
|
||||
- present_5.actions | length == 1
|
||||
- present_5.actions[0] == ('Pulled image ' ~ docker_test_image_digest_base ~ ':sha256:' ~ docker_test_image_digest_v2)
|
||||
- present_5.diff.before.exists is false
|
||||
- present_5.diff.after.id != present_1.diff.after.id
|
||||
- present_5.diff.after.id is string
|
||||
|
||||
always:
|
||||
- name: cleanup
|
||||
|
||||
@ -103,24 +103,24 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- pull_1_check is changed
|
||||
- pull_1_check.diff.before.exists is false
|
||||
- pull_1_check.diff.after.id == 'unknown'
|
||||
- pull_1 is changed
|
||||
- pull_1.diff.before.exists is false
|
||||
- pull_1.diff.after.id == facts_1.images[0].Id
|
||||
- pull_2_check is not changed
|
||||
- pull_2_check.diff.before.id == facts_1.images[0].Id
|
||||
- pull_2_check.diff.before == pull_2.diff.after
|
||||
- pull_2 is not changed
|
||||
- pull_2.diff.before.id == facts_1.images[0].Id
|
||||
- pull_2.diff.before == pull_2.diff.after
|
||||
- pull_3_check is changed
|
||||
- pull_3_check.diff.before.id == facts_1.images[0].Id
|
||||
- pull_3_check.diff.after.id == 'unknown'
|
||||
- pull_3 is not changed
|
||||
- pull_3.diff.before.id == facts_1.images[0].Id
|
||||
- pull_3.diff.before == pull_2.diff.after
|
||||
- facts_1.images | length == 1
|
||||
- facts_2.images | length == 0
|
||||
- facts_3.images | length == 1
|
||||
- pull_1_check is changed
|
||||
- pull_1_check.diff.before.exists is false
|
||||
- pull_1_check.diff.after.id == 'unknown'
|
||||
- pull_1 is changed
|
||||
- pull_1.diff.before.exists is false
|
||||
- pull_1.diff.after.id == facts_1.images[0].Id
|
||||
- pull_2_check is not changed
|
||||
- pull_2_check.diff.before.id == facts_1.images[0].Id
|
||||
- pull_2_check.diff.before == pull_2.diff.after
|
||||
- pull_2 is not changed
|
||||
- pull_2.diff.before.id == facts_1.images[0].Id
|
||||
- pull_2.diff.before == pull_2.diff.after
|
||||
- pull_3_check is changed
|
||||
- pull_3_check.diff.before.id == facts_1.images[0].Id
|
||||
- pull_3_check.diff.after.id == 'unknown'
|
||||
- pull_3 is not changed
|
||||
- pull_3.diff.before.id == facts_1.images[0].Id
|
||||
- pull_3.diff.before == pull_2.diff.after
|
||||
- facts_1.images | length == 1
|
||||
- facts_2.images | length == 0
|
||||
- facts_3.images | length == 1
|
||||
|
||||
@ -43,18 +43,18 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- fail_1 is failed
|
||||
- >-
|
||||
'Cannot find image registry.example.com:5000/foo/bar:baz' == fail_1.msg
|
||||
- fail_2 is failed
|
||||
- >-
|
||||
'Cannot push an image by ID' == fail_2.msg
|
||||
- fail_3 is failed
|
||||
- >-
|
||||
'Cannot push an image by digest' == fail_3.msg
|
||||
- fail_4 is failed
|
||||
- >-
|
||||
'"foo/bar" is not a valid docker tag!' == fail_4.msg
|
||||
- fail_5 is failed
|
||||
- >-
|
||||
'"foo bar" is not a valid docker tag!' == fail_5.msg
|
||||
- fail_1 is failed
|
||||
- >-
|
||||
'Cannot find image registry.example.com:5000/foo/bar:baz' == fail_1.msg
|
||||
- fail_2 is failed
|
||||
- >-
|
||||
'Cannot push an image by ID' == fail_2.msg
|
||||
- fail_3 is failed
|
||||
- >-
|
||||
'Cannot push an image by digest' == fail_3.msg
|
||||
- fail_4 is failed
|
||||
- >-
|
||||
'"foo/bar" is not a valid docker tag!' == fail_4.msg
|
||||
- fail_5 is failed
|
||||
- >-
|
||||
'"foo bar" is not a valid docker tag!' == fail_5.msg
|
||||
|
||||
@ -4,147 +4,147 @@
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
- block:
|
||||
- name: Log out server
|
||||
docker_login:
|
||||
registry_url: "{{ registry_frontend_address }}"
|
||||
username: testuser
|
||||
password: hunter2
|
||||
state: absent
|
||||
- name: Log out server
|
||||
docker_login:
|
||||
registry_url: "{{ registry_frontend_address }}"
|
||||
username: testuser
|
||||
password: hunter2
|
||||
state: absent
|
||||
|
||||
- name: Log in with wrong password (check mode)
|
||||
docker_login:
|
||||
registry_url: "{{ registry_frontend_address }}"
|
||||
username: testuser
|
||||
password: "1234"
|
||||
state: present
|
||||
register: login_failed_check
|
||||
ignore_errors: true
|
||||
check_mode: true
|
||||
- name: Log in with wrong password (check mode)
|
||||
docker_login:
|
||||
registry_url: "{{ registry_frontend_address }}"
|
||||
username: testuser
|
||||
password: "1234"
|
||||
state: present
|
||||
register: login_failed_check
|
||||
ignore_errors: true
|
||||
check_mode: true
|
||||
|
||||
- name: Log in with wrong password
|
||||
docker_login:
|
||||
registry_url: "{{ registry_frontend_address }}"
|
||||
username: testuser
|
||||
password: "1234"
|
||||
state: present
|
||||
register: login_failed
|
||||
ignore_errors: true
|
||||
- name: Log in with wrong password
|
||||
docker_login:
|
||||
registry_url: "{{ registry_frontend_address }}"
|
||||
username: testuser
|
||||
password: "1234"
|
||||
state: present
|
||||
register: login_failed
|
||||
ignore_errors: true
|
||||
|
||||
- name: Make sure that login failed
|
||||
assert:
|
||||
that:
|
||||
- login_failed_check is failed
|
||||
- "('login attempt to http://' ~ registry_frontend_address ~ '/v2/ failed') in login_failed_check.msg"
|
||||
- login_failed is failed
|
||||
- "('login attempt to http://' ~ registry_frontend_address ~ '/v2/ failed') in login_failed.msg"
|
||||
- name: Make sure that login failed
|
||||
assert:
|
||||
that:
|
||||
- login_failed_check is failed
|
||||
- "('login attempt to http://' ~ registry_frontend_address ~ '/v2/ failed') in login_failed_check.msg"
|
||||
- login_failed is failed
|
||||
- "('login attempt to http://' ~ registry_frontend_address ~ '/v2/ failed') in login_failed.msg"
|
||||
|
||||
- name: Log in (check mode)
|
||||
docker_login:
|
||||
registry_url: "{{ registry_frontend_address }}"
|
||||
username: testuser
|
||||
password: hunter2
|
||||
state: present
|
||||
register: login_1
|
||||
check_mode: true
|
||||
- name: Log in (check mode)
|
||||
docker_login:
|
||||
registry_url: "{{ registry_frontend_address }}"
|
||||
username: testuser
|
||||
password: hunter2
|
||||
state: present
|
||||
register: login_1
|
||||
check_mode: true
|
||||
|
||||
- name: Log in
|
||||
docker_login:
|
||||
registry_url: "{{ registry_frontend_address }}"
|
||||
username: testuser
|
||||
password: hunter2
|
||||
state: present
|
||||
register: login_2
|
||||
- name: Log in
|
||||
docker_login:
|
||||
registry_url: "{{ registry_frontend_address }}"
|
||||
username: testuser
|
||||
password: hunter2
|
||||
state: present
|
||||
register: login_2
|
||||
|
||||
- name: Get permissions of ~/.docker/config.json
|
||||
stat:
|
||||
path: ~/.docker/config.json
|
||||
register: login_2_stat
|
||||
- name: Get permissions of ~/.docker/config.json
|
||||
stat:
|
||||
path: ~/.docker/config.json
|
||||
register: login_2_stat
|
||||
|
||||
- name: Log in (idempotent)
|
||||
docker_login:
|
||||
registry_url: "{{ registry_frontend_address }}"
|
||||
username: testuser
|
||||
password: hunter2
|
||||
state: present
|
||||
register: login_3
|
||||
- name: Log in (idempotent)
|
||||
docker_login:
|
||||
registry_url: "{{ registry_frontend_address }}"
|
||||
username: testuser
|
||||
password: hunter2
|
||||
state: present
|
||||
register: login_3
|
||||
|
||||
- name: Log in (idempotent, check mode)
|
||||
docker_login:
|
||||
registry_url: "{{ registry_frontend_address }}"
|
||||
username: testuser
|
||||
password: hunter2
|
||||
state: present
|
||||
register: login_4
|
||||
check_mode: true
|
||||
- name: Log in (idempotent, check mode)
|
||||
docker_login:
|
||||
registry_url: "{{ registry_frontend_address }}"
|
||||
username: testuser
|
||||
password: hunter2
|
||||
state: present
|
||||
register: login_4
|
||||
check_mode: true
|
||||
|
||||
- name: Make sure that login worked
|
||||
assert:
|
||||
that:
|
||||
- login_1 is changed
|
||||
- login_2 is changed
|
||||
- login_3 is not changed
|
||||
- login_4 is not changed
|
||||
- login_2_stat.stat.mode == '0600'
|
||||
- name: Make sure that login worked
|
||||
assert:
|
||||
that:
|
||||
- login_1 is changed
|
||||
- login_2 is changed
|
||||
- login_3 is not changed
|
||||
- login_4 is not changed
|
||||
- login_2_stat.stat.mode == '0600'
|
||||
|
||||
- name: Log in again with wrong password (check mode)
|
||||
docker_login:
|
||||
registry_url: "{{ registry_frontend_address }}"
|
||||
username: testuser
|
||||
password: "1234"
|
||||
state: present
|
||||
register: login_failed_check
|
||||
ignore_errors: true
|
||||
check_mode: true
|
||||
- name: Log in again with wrong password (check mode)
|
||||
docker_login:
|
||||
registry_url: "{{ registry_frontend_address }}"
|
||||
username: testuser
|
||||
password: "1234"
|
||||
state: present
|
||||
register: login_failed_check
|
||||
ignore_errors: true
|
||||
check_mode: true
|
||||
|
||||
- name: Log in again with wrong password
|
||||
docker_login:
|
||||
registry_url: "{{ registry_frontend_address }}"
|
||||
username: testuser
|
||||
password: "1234"
|
||||
state: present
|
||||
register: login_failed
|
||||
ignore_errors: true
|
||||
- name: Log in again with wrong password
|
||||
docker_login:
|
||||
registry_url: "{{ registry_frontend_address }}"
|
||||
username: testuser
|
||||
password: "1234"
|
||||
state: present
|
||||
register: login_failed
|
||||
ignore_errors: true
|
||||
|
||||
- name: Make sure that login failed again
|
||||
assert:
|
||||
that:
|
||||
- login_failed_check is failed
|
||||
- "('login attempt to http://' ~ registry_frontend_address ~ '/v2/ failed') in login_failed_check.msg"
|
||||
- login_failed is failed
|
||||
- "('login attempt to http://' ~ registry_frontend_address ~ '/v2/ failed') in login_failed.msg"
|
||||
- name: Make sure that login failed again
|
||||
assert:
|
||||
that:
|
||||
- login_failed_check is failed
|
||||
- "('login attempt to http://' ~ registry_frontend_address ~ '/v2/ failed') in login_failed_check.msg"
|
||||
- login_failed is failed
|
||||
- "('login attempt to http://' ~ registry_frontend_address ~ '/v2/ failed') in login_failed.msg"
|
||||
|
||||
- name: Log out (check mode)
|
||||
docker_login:
|
||||
registry_url: "{{ registry_frontend_address }}"
|
||||
state: absent
|
||||
register: logout_1
|
||||
check_mode: true
|
||||
- name: Log out (check mode)
|
||||
docker_login:
|
||||
registry_url: "{{ registry_frontend_address }}"
|
||||
state: absent
|
||||
register: logout_1
|
||||
check_mode: true
|
||||
|
||||
- name: Log out
|
||||
docker_login:
|
||||
registry_url: "{{ registry_frontend_address }}"
|
||||
state: absent
|
||||
register: logout_2
|
||||
- name: Log out
|
||||
docker_login:
|
||||
registry_url: "{{ registry_frontend_address }}"
|
||||
state: absent
|
||||
register: logout_2
|
||||
|
||||
- name: Log out (idempotent)
|
||||
docker_login:
|
||||
registry_url: "{{ registry_frontend_address }}"
|
||||
state: absent
|
||||
register: logout_3
|
||||
- name: Log out (idempotent)
|
||||
docker_login:
|
||||
registry_url: "{{ registry_frontend_address }}"
|
||||
state: absent
|
||||
register: logout_3
|
||||
|
||||
- name: Log out (idempotent, check mode)
|
||||
docker_login:
|
||||
registry_url: "{{ registry_frontend_address }}"
|
||||
state: absent
|
||||
register: logout_4
|
||||
check_mode: true
|
||||
- name: Log out (idempotent, check mode)
|
||||
docker_login:
|
||||
registry_url: "{{ registry_frontend_address }}"
|
||||
state: absent
|
||||
register: logout_4
|
||||
check_mode: true
|
||||
|
||||
- name: Make sure that login worked
|
||||
assert:
|
||||
that:
|
||||
- logout_1 is changed
|
||||
- logout_2 is changed
|
||||
- logout_3 is not changed
|
||||
- logout_4 is not changed
|
||||
- name: Make sure that login worked
|
||||
assert:
|
||||
that:
|
||||
- logout_1 is changed
|
||||
- logout_2 is changed
|
||||
- logout_3 is not changed
|
||||
- logout_4 is not changed
|
||||
|
||||
when: registry_frontend_address != 'n/a'
|
||||
|
||||
@ -4,58 +4,58 @@
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
- block:
|
||||
- name: Log out server 1
|
||||
docker_login:
|
||||
registry_url: "{{ registry_frontend_address }}"
|
||||
username: testuser
|
||||
password: hunter2
|
||||
state: absent
|
||||
- name: Log out server 1
|
||||
docker_login:
|
||||
registry_url: "{{ registry_frontend_address }}"
|
||||
username: testuser
|
||||
password: hunter2
|
||||
state: absent
|
||||
|
||||
- name: Log out server 2
|
||||
docker_login:
|
||||
registry_url: "{{ registry_frontend2_address }}"
|
||||
username: testuser
|
||||
password: hunter2
|
||||
state: absent
|
||||
- name: Log out server 2
|
||||
docker_login:
|
||||
registry_url: "{{ registry_frontend2_address }}"
|
||||
username: testuser
|
||||
password: hunter2
|
||||
state: absent
|
||||
|
||||
- name: Log in server 1
|
||||
docker_login:
|
||||
registry_url: "{{ registry_frontend_address }}"
|
||||
username: testuser
|
||||
password: hunter2
|
||||
state: present
|
||||
register: login_1
|
||||
- name: Log in server 1
|
||||
docker_login:
|
||||
registry_url: "{{ registry_frontend_address }}"
|
||||
username: testuser
|
||||
password: hunter2
|
||||
state: present
|
||||
register: login_1
|
||||
|
||||
- name: Log in server 2
|
||||
docker_login:
|
||||
registry_url: "{{ registry_frontend2_address }}"
|
||||
username: testuser
|
||||
password: hunter2
|
||||
state: present
|
||||
register: login_2
|
||||
- name: Log in server 2
|
||||
docker_login:
|
||||
registry_url: "{{ registry_frontend2_address }}"
|
||||
username: testuser
|
||||
password: hunter2
|
||||
state: present
|
||||
register: login_2
|
||||
|
||||
- name: Log in server 1 (idempotent)
|
||||
docker_login:
|
||||
registry_url: "{{ registry_frontend_address }}"
|
||||
username: testuser
|
||||
password: hunter2
|
||||
state: present
|
||||
register: login_1_2
|
||||
- name: Log in server 1 (idempotent)
|
||||
docker_login:
|
||||
registry_url: "{{ registry_frontend_address }}"
|
||||
username: testuser
|
||||
password: hunter2
|
||||
state: present
|
||||
register: login_1_2
|
||||
|
||||
- name: Log in server 2 (idempotent)
|
||||
docker_login:
|
||||
registry_url: "{{ registry_frontend2_address }}"
|
||||
username: testuser
|
||||
password: hunter2
|
||||
state: present
|
||||
register: login_2_2
|
||||
- name: Log in server 2 (idempotent)
|
||||
docker_login:
|
||||
registry_url: "{{ registry_frontend2_address }}"
|
||||
username: testuser
|
||||
password: hunter2
|
||||
state: present
|
||||
register: login_2_2
|
||||
|
||||
- name: Make sure that login worked
|
||||
assert:
|
||||
that:
|
||||
- login_1 is changed
|
||||
- login_2 is changed
|
||||
- login_1_2 is not changed
|
||||
- login_2_2 is not changed
|
||||
- name: Make sure that login worked
|
||||
assert:
|
||||
that:
|
||||
- login_1 is changed
|
||||
- login_2 is changed
|
||||
- login_1_2 is not changed
|
||||
- login_2_2 is not changed
|
||||
|
||||
when: registry_frontend_address != 'n/a' and registry_frontend2_address != 'n/a'
|
||||
|
||||
@ -22,9 +22,9 @@
|
||||
command: /bin/sleep 10m
|
||||
state: started
|
||||
loop:
|
||||
- "{{ cname_1 }}"
|
||||
- "{{ cname_2 }}"
|
||||
- "{{ cname_3 }}"
|
||||
- "{{ cname_1 }}"
|
||||
- "{{ cname_2 }}"
|
||||
- "{{ cname_3 }}"
|
||||
loop_control:
|
||||
loop_var: container_name
|
||||
|
||||
@ -41,7 +41,7 @@
|
||||
name: "{{ nname_1 }}"
|
||||
state: present
|
||||
connected:
|
||||
- "{{ cname_1 }}"
|
||||
- "{{ cname_1 }}"
|
||||
register: networks_2
|
||||
|
||||
- name: Connect network to containers 1 (idempotency)
|
||||
@ -49,7 +49,7 @@
|
||||
name: "{{ nname_1 }}"
|
||||
state: present
|
||||
connected:
|
||||
- "{{ cname_1 }}"
|
||||
- "{{ cname_1 }}"
|
||||
register: networks_2_idem
|
||||
|
||||
- name: Connect network to containers 1 and 2
|
||||
@ -57,8 +57,8 @@
|
||||
name: "{{ nname_1 }}"
|
||||
state: present
|
||||
connected:
|
||||
- "{{ cname_1 }}"
|
||||
- "{{ cname_2 }}"
|
||||
- "{{ cname_1 }}"
|
||||
- "{{ cname_2 }}"
|
||||
register: networks_3
|
||||
|
||||
- name: Connect network to containers 1 and 2 (idempotency)
|
||||
@ -66,8 +66,8 @@
|
||||
name: "{{ nname_1 }}"
|
||||
state: present
|
||||
connected:
|
||||
- "{{ cname_1 }}"
|
||||
- "{{ cname_2 }}"
|
||||
- "{{ cname_1 }}"
|
||||
- "{{ cname_2 }}"
|
||||
register: networks_3_idem
|
||||
|
||||
- name: Connect network to container 3
|
||||
@ -75,7 +75,7 @@
|
||||
name: "{{ nname_1 }}"
|
||||
state: present
|
||||
connected:
|
||||
- "{{ cname_3 }}"
|
||||
- "{{ cname_3 }}"
|
||||
appends: true
|
||||
register: networks_4
|
||||
|
||||
@ -84,7 +84,7 @@
|
||||
name: "{{ nname_1 }}"
|
||||
state: present
|
||||
connected:
|
||||
- "{{ cname_3 }}"
|
||||
- "{{ cname_3 }}"
|
||||
appends: true
|
||||
register: networks_4_idem
|
||||
|
||||
@ -93,8 +93,8 @@
|
||||
name: "{{ nname_1 }}"
|
||||
state: present
|
||||
connected:
|
||||
- "{{ cname_2 }}"
|
||||
- "{{ cname_3 }}"
|
||||
- "{{ cname_2 }}"
|
||||
- "{{ cname_3 }}"
|
||||
register: networks_5
|
||||
|
||||
- name: Disconnect network from container 1 (idempotency)
|
||||
@ -102,8 +102,8 @@
|
||||
name: "{{ nname_1 }}"
|
||||
state: present
|
||||
connected:
|
||||
- "{{ cname_2 }}"
|
||||
- "{{ cname_3 }}"
|
||||
- "{{ cname_2 }}"
|
||||
- "{{ cname_3 }}"
|
||||
register: networks_5_idem
|
||||
|
||||
- name: Cleanup
|
||||
@ -113,15 +113,15 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- networks_1 is changed
|
||||
- networks_2 is changed
|
||||
- networks_2_idem is not changed
|
||||
- networks_3 is changed
|
||||
- networks_3_idem is not changed
|
||||
- networks_4 is changed
|
||||
- networks_4_idem is not changed
|
||||
- networks_5 is changed
|
||||
- networks_5_idem is not changed
|
||||
- networks_1 is changed
|
||||
- networks_2 is changed
|
||||
- networks_2_idem is not changed
|
||||
- networks_3 is changed
|
||||
- networks_3_idem is not changed
|
||||
- networks_4 is changed
|
||||
- networks_4_idem is not changed
|
||||
- networks_5 is changed
|
||||
- networks_5_idem is not changed
|
||||
|
||||
####################################################################
|
||||
|
||||
@ -131,8 +131,8 @@
|
||||
state: absent
|
||||
force_kill: true
|
||||
loop:
|
||||
- "{{ cname_1 }}"
|
||||
- "{{ cname_2 }}"
|
||||
- "{{ cname_3 }}"
|
||||
- "{{ cname_1 }}"
|
||||
- "{{ cname_2 }}"
|
||||
- "{{ cname_3 }}"
|
||||
loop_control:
|
||||
loop_var: container_name
|
||||
|
||||
@ -200,71 +200,71 @@
|
||||
#################### multiple IPv4 networks ####################
|
||||
|
||||
- block:
|
||||
- name: Create network with two IPv4 IPAM configs
|
||||
docker_network:
|
||||
name: "{{ nname_ipam_3 }}"
|
||||
driver: "macvlan"
|
||||
driver_options:
|
||||
parent: "{{ ansible_default_ipv4.alias }}"
|
||||
ipam_config:
|
||||
- subnet: 10.26.120.0/24
|
||||
- subnet: 10.26.121.0/24
|
||||
register: network
|
||||
- name: Create network with two IPv4 IPAM configs
|
||||
docker_network:
|
||||
name: "{{ nname_ipam_3 }}"
|
||||
driver: "macvlan"
|
||||
driver_options:
|
||||
parent: "{{ ansible_default_ipv4.alias }}"
|
||||
ipam_config:
|
||||
- subnet: 10.26.120.0/24
|
||||
- subnet: 10.26.121.0/24
|
||||
register: network
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- network is changed
|
||||
- assert:
|
||||
that:
|
||||
- network is changed
|
||||
|
||||
- name: Create network with two IPv4 IPAM configs (idempotence)
|
||||
docker_network:
|
||||
name: "{{ nname_ipam_3 }}"
|
||||
driver: "macvlan"
|
||||
driver_options:
|
||||
parent: "{{ ansible_default_ipv4.alias }}"
|
||||
ipam_config:
|
||||
- subnet: 10.26.121.0/24
|
||||
- subnet: 10.26.120.0/24
|
||||
register: network
|
||||
- name: Create network with two IPv4 IPAM configs (idempotence)
|
||||
docker_network:
|
||||
name: "{{ nname_ipam_3 }}"
|
||||
driver: "macvlan"
|
||||
driver_options:
|
||||
parent: "{{ ansible_default_ipv4.alias }}"
|
||||
ipam_config:
|
||||
- subnet: 10.26.121.0/24
|
||||
- subnet: 10.26.120.0/24
|
||||
register: network
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- network is not changed
|
||||
- assert:
|
||||
that:
|
||||
- network is not changed
|
||||
|
||||
- name: Create network with two IPv4 IPAM configs (change)
|
||||
docker_network:
|
||||
name: "{{ nname_ipam_3 }}"
|
||||
driver: "macvlan"
|
||||
driver_options:
|
||||
parent: "{{ ansible_default_ipv4.alias }}"
|
||||
ipam_config:
|
||||
- subnet: 10.26.120.0/24
|
||||
- subnet: 10.26.122.0/24
|
||||
register: network
|
||||
diff: true
|
||||
- name: Create network with two IPv4 IPAM configs (change)
|
||||
docker_network:
|
||||
name: "{{ nname_ipam_3 }}"
|
||||
driver: "macvlan"
|
||||
driver_options:
|
||||
parent: "{{ ansible_default_ipv4.alias }}"
|
||||
ipam_config:
|
||||
- subnet: 10.26.120.0/24
|
||||
- subnet: 10.26.122.0/24
|
||||
register: network
|
||||
diff: true
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- network is changed
|
||||
- network.diff.differences | length == 1
|
||||
- assert:
|
||||
that:
|
||||
- network is changed
|
||||
- network.diff.differences | length == 1
|
||||
|
||||
- name: Create network with one IPv4 IPAM config (no change)
|
||||
docker_network:
|
||||
name: "{{ nname_ipam_3 }}"
|
||||
driver: "macvlan"
|
||||
driver_options:
|
||||
parent: "{{ ansible_default_ipv4.alias }}"
|
||||
ipam_config:
|
||||
- subnet: 10.26.122.0/24
|
||||
register: network
|
||||
- name: Create network with one IPv4 IPAM config (no change)
|
||||
docker_network:
|
||||
name: "{{ nname_ipam_3 }}"
|
||||
driver: "macvlan"
|
||||
driver_options:
|
||||
parent: "{{ ansible_default_ipv4.alias }}"
|
||||
ipam_config:
|
||||
- subnet: 10.26.122.0/24
|
||||
register: network
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- network is not changed
|
||||
- assert:
|
||||
that:
|
||||
- network is not changed
|
||||
|
||||
- name: Cleanup network
|
||||
docker_network:
|
||||
name: "{{ nname_ipam_3 }}"
|
||||
state: absent
|
||||
- name: Cleanup network
|
||||
docker_network:
|
||||
name: "{{ nname_ipam_3 }}"
|
||||
state: absent
|
||||
|
||||
when: ansible_facts.virtualization_type != 'docker' and ansible_default_ipv4.alias is defined
|
||||
|
||||
|
||||
@ -40,9 +40,9 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- internal_1 is changed
|
||||
- internal_2 is not changed
|
||||
- internal_3 is changed
|
||||
- internal_1 is changed
|
||||
- internal_2 is not changed
|
||||
- internal_3 is changed
|
||||
|
||||
####################################################################
|
||||
## driver_options ##################################################
|
||||
@ -91,62 +91,62 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- driver_options_1 is changed
|
||||
- driver_options_2 is not changed
|
||||
- driver_options_3 is not changed
|
||||
- driver_options_4 is changed
|
||||
- driver_options_5 is not changed
|
||||
- driver_options_1 is changed
|
||||
- driver_options_2 is not changed
|
||||
- driver_options_3 is not changed
|
||||
- driver_options_4 is changed
|
||||
- driver_options_5 is not changed
|
||||
|
||||
####################################################################
|
||||
## scope ###########################################################
|
||||
####################################################################
|
||||
|
||||
- block:
|
||||
- name: scope
|
||||
docker_network:
|
||||
name: "{{ nname_1 }}"
|
||||
driver: bridge
|
||||
scope: local
|
||||
register: scope_1
|
||||
- name: scope
|
||||
docker_network:
|
||||
name: "{{ nname_1 }}"
|
||||
driver: bridge
|
||||
scope: local
|
||||
register: scope_1
|
||||
|
||||
- name: scope (idempotency)
|
||||
docker_network:
|
||||
name: "{{ nname_1 }}"
|
||||
driver: bridge
|
||||
scope: local
|
||||
register: scope_2
|
||||
- name: scope (idempotency)
|
||||
docker_network:
|
||||
name: "{{ nname_1 }}"
|
||||
driver: bridge
|
||||
scope: local
|
||||
register: scope_2
|
||||
|
||||
- name: swarm
|
||||
docker_swarm:
|
||||
state: present
|
||||
advertise_addr: "{{ ansible_default_ipv4.address | default('127.0.0.1') }}"
|
||||
- name: swarm
|
||||
docker_swarm:
|
||||
state: present
|
||||
advertise_addr: "{{ ansible_default_ipv4.address | default('127.0.0.1') }}"
|
||||
|
||||
# Driver change alongside scope is intentional - bridge doesn't appear to support anything but local, and overlay can't downgrade to local. Additionally, overlay reports as swarm for swarm OR global, so no change is reported in that case.
|
||||
# Test output indicates that the scope is altered, at least, so manual inspection will be required to verify this going forward, unless we come up with a test driver that supports multiple scopes.
|
||||
- name: scope (change)
|
||||
docker_network:
|
||||
name: "{{ nname_1 }}"
|
||||
driver: overlay
|
||||
scope: swarm
|
||||
register: scope_3
|
||||
# Driver change alongside scope is intentional - bridge doesn't appear to support anything but local, and overlay can't downgrade to local. Additionally, overlay reports as swarm for swarm OR global, so no change is reported in that case.
|
||||
# Test output indicates that the scope is altered, at least, so manual inspection will be required to verify this going forward, unless we come up with a test driver that supports multiple scopes.
|
||||
- name: scope (change)
|
||||
docker_network:
|
||||
name: "{{ nname_1 }}"
|
||||
driver: overlay
|
||||
scope: swarm
|
||||
register: scope_3
|
||||
|
||||
- name: cleanup network
|
||||
docker_network:
|
||||
name: "{{ nname_1 }}"
|
||||
state: absent
|
||||
force: true
|
||||
- name: cleanup network
|
||||
docker_network:
|
||||
name: "{{ nname_1 }}"
|
||||
state: absent
|
||||
force: true
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- scope_1 is changed
|
||||
- scope_2 is not changed
|
||||
- scope_3 is changed
|
||||
- assert:
|
||||
that:
|
||||
- scope_1 is changed
|
||||
- scope_2 is not changed
|
||||
- scope_3 is changed
|
||||
|
||||
always:
|
||||
- name: cleanup swarm
|
||||
docker_swarm:
|
||||
state: absent
|
||||
force: true
|
||||
- name: cleanup swarm
|
||||
docker_swarm:
|
||||
state: absent
|
||||
force: true
|
||||
|
||||
####################################################################
|
||||
## attachable ######################################################
|
||||
@ -158,21 +158,21 @@
|
||||
attachable: true
|
||||
register: attachable_1
|
||||
ignore_errors: true
|
||||
|
||||
|
||||
- name: attachable (idempotency)
|
||||
docker_network:
|
||||
name: "{{ nname_1 }}"
|
||||
attachable: true
|
||||
register: attachable_2
|
||||
ignore_errors: true
|
||||
|
||||
|
||||
- name: attachable (change)
|
||||
docker_network:
|
||||
name: "{{ nname_1 }}"
|
||||
attachable: false
|
||||
register: attachable_3
|
||||
ignore_errors: true
|
||||
|
||||
|
||||
- name: cleanup
|
||||
docker_network:
|
||||
name: "{{ nname_1 }}"
|
||||
@ -181,9 +181,9 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- attachable_1 is changed
|
||||
- attachable_2 is not changed
|
||||
- attachable_3 is changed
|
||||
- attachable_1 is changed
|
||||
- attachable_2 is not changed
|
||||
- attachable_3 is changed
|
||||
|
||||
####################################################################
|
||||
## labels ##########################################################
|
||||
@ -228,7 +228,7 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- labels_1 is changed
|
||||
- labels_2 is not changed
|
||||
- labels_3 is not changed
|
||||
- labels_4 is changed
|
||||
- labels_1 is changed
|
||||
- labels_2 is not changed
|
||||
- labels_3 is not changed
|
||||
- labels_4 is changed
|
||||
|
||||
@ -11,94 +11,94 @@
|
||||
dnetworks: "{{ dnetworks + [nname_1] }}"
|
||||
|
||||
- block:
|
||||
# Overlay networks require swarm initialization before they'll work
|
||||
- name: swarm
|
||||
docker_swarm:
|
||||
state: present
|
||||
advertise_addr: "{{ ansible_default_ipv4.address | default('127.0.0.1') }}"
|
||||
# Overlay networks require swarm initialization before they'll work
|
||||
- name: swarm
|
||||
docker_swarm:
|
||||
state: present
|
||||
advertise_addr: "{{ ansible_default_ipv4.address | default('127.0.0.1') }}"
|
||||
|
||||
####################################################################
|
||||
## overlay #########################################################
|
||||
####################################################################
|
||||
####################################################################
|
||||
## overlay #########################################################
|
||||
####################################################################
|
||||
|
||||
- name: overlay
|
||||
docker_network:
|
||||
name: "{{ nname_1 }}"
|
||||
driver: overlay
|
||||
driver_options:
|
||||
com.docker.network.driver.overlay.vxlanid_list: "257"
|
||||
register: overlay_1
|
||||
- name: overlay
|
||||
docker_network:
|
||||
name: "{{ nname_1 }}"
|
||||
driver: overlay
|
||||
driver_options:
|
||||
com.docker.network.driver.overlay.vxlanid_list: "257"
|
||||
register: overlay_1
|
||||
|
||||
- name: overlay (idempotency)
|
||||
docker_network:
|
||||
name: "{{ nname_1 }}"
|
||||
driver: overlay
|
||||
driver_options:
|
||||
com.docker.network.driver.overlay.vxlanid_list: "257"
|
||||
register: overlay_2
|
||||
- name: overlay (idempotency)
|
||||
docker_network:
|
||||
name: "{{ nname_1 }}"
|
||||
driver: overlay
|
||||
driver_options:
|
||||
com.docker.network.driver.overlay.vxlanid_list: "257"
|
||||
register: overlay_2
|
||||
|
||||
- name: overlay (change)
|
||||
docker_network:
|
||||
name: "{{ nname_1 }}"
|
||||
driver: bridge
|
||||
register: overlay_3
|
||||
- name: overlay (change)
|
||||
docker_network:
|
||||
name: "{{ nname_1 }}"
|
||||
driver: bridge
|
||||
register: overlay_3
|
||||
|
||||
- name: cleanup network
|
||||
docker_network:
|
||||
name: "{{ nname_1 }}"
|
||||
state: absent
|
||||
force: true
|
||||
- name: cleanup network
|
||||
docker_network:
|
||||
name: "{{ nname_1 }}"
|
||||
state: absent
|
||||
force: true
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- overlay_1 is changed
|
||||
- overlay_2 is not changed
|
||||
- overlay_3 is changed
|
||||
- assert:
|
||||
that:
|
||||
- overlay_1 is changed
|
||||
- overlay_2 is not changed
|
||||
- overlay_3 is changed
|
||||
|
||||
####################################################################
|
||||
## ingress #########################################################
|
||||
####################################################################
|
||||
####################################################################
|
||||
## ingress #########################################################
|
||||
####################################################################
|
||||
|
||||
- name: cleanup default swarm ingress network
|
||||
docker_network:
|
||||
name: ingress
|
||||
state: absent
|
||||
- name: cleanup default swarm ingress network
|
||||
docker_network:
|
||||
name: ingress
|
||||
state: absent
|
||||
|
||||
- name: ingress
|
||||
docker_network:
|
||||
name: "{{ nname_1 }}"
|
||||
driver: overlay
|
||||
ingress: true
|
||||
register: ingress_1
|
||||
- name: ingress
|
||||
docker_network:
|
||||
name: "{{ nname_1 }}"
|
||||
driver: overlay
|
||||
ingress: true
|
||||
register: ingress_1
|
||||
|
||||
- name: ingress (idempotency)
|
||||
docker_network:
|
||||
name: "{{ nname_1 }}"
|
||||
driver: overlay
|
||||
ingress: true
|
||||
register: ingress_2
|
||||
- name: ingress (idempotency)
|
||||
docker_network:
|
||||
name: "{{ nname_1 }}"
|
||||
driver: overlay
|
||||
ingress: true
|
||||
register: ingress_2
|
||||
|
||||
- name: ingress (change)
|
||||
docker_network:
|
||||
name: "{{ nname_1 }}"
|
||||
driver: overlay
|
||||
ingress: false
|
||||
register: ingress_3
|
||||
- name: ingress (change)
|
||||
docker_network:
|
||||
name: "{{ nname_1 }}"
|
||||
driver: overlay
|
||||
ingress: false
|
||||
register: ingress_3
|
||||
|
||||
- name: cleanup network
|
||||
docker_network:
|
||||
name: "{{ nname_1 }}"
|
||||
state: absent
|
||||
force: true
|
||||
- name: cleanup network
|
||||
docker_network:
|
||||
name: "{{ nname_1 }}"
|
||||
state: absent
|
||||
force: true
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- ingress_1 is changed
|
||||
- ingress_2 is not changed
|
||||
- ingress_3 is changed
|
||||
- assert:
|
||||
that:
|
||||
- ingress_1 is changed
|
||||
- ingress_2 is not changed
|
||||
- ingress_3 is changed
|
||||
|
||||
always:
|
||||
- name: cleanup swarm
|
||||
docker_swarm:
|
||||
state: absent
|
||||
force: true
|
||||
- name: cleanup swarm
|
||||
docker_swarm:
|
||||
state: absent
|
||||
force: true
|
||||
|
||||
@ -30,12 +30,12 @@
|
||||
name: "{{ network_name }}"
|
||||
state: absent
|
||||
loop:
|
||||
- "{{ nname_1 }}"
|
||||
- "{{ nname_2 }}"
|
||||
- "{{ nname_1 }}"
|
||||
- "{{ nname_2 }}"
|
||||
loop_control:
|
||||
loop_var: network_name
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- networks_1 is changed
|
||||
- networks_2 is changed
|
||||
- networks_1 is changed
|
||||
- networks_2 is changed
|
||||
|
||||
@ -9,70 +9,70 @@
|
||||
####################################################################
|
||||
|
||||
- block:
|
||||
- name: Create random network name
|
||||
set_fact:
|
||||
nname: "{{ 'ansible-docker-test-%0x' % ((2**32) | random) }}"
|
||||
- name: Create random network name
|
||||
set_fact:
|
||||
nname: "{{ 'ansible-docker-test-%0x' % ((2**32) | random) }}"
|
||||
|
||||
- name: Make sure network is not there
|
||||
docker_network:
|
||||
name: "{{ nname }}"
|
||||
state: absent
|
||||
force: true
|
||||
- name: Make sure network is not there
|
||||
docker_network:
|
||||
name: "{{ nname }}"
|
||||
state: absent
|
||||
force: true
|
||||
|
||||
- name: Inspect a non-present network
|
||||
docker_network_info:
|
||||
name: "{{ nname }}"
|
||||
register: result
|
||||
- name: Inspect a non-present network
|
||||
docker_network_info:
|
||||
name: "{{ nname }}"
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- "not result.exists"
|
||||
- "'network' in result"
|
||||
- "result.network is none"
|
||||
- assert:
|
||||
that:
|
||||
- "not result.exists"
|
||||
- "'network' in result"
|
||||
- "result.network is none"
|
||||
|
||||
- name: Make sure network exists
|
||||
docker_network:
|
||||
name: "{{ nname }}"
|
||||
state: present
|
||||
- name: Make sure network exists
|
||||
docker_network:
|
||||
name: "{{ nname }}"
|
||||
state: present
|
||||
|
||||
- name: Inspect a present network
|
||||
docker_network_info:
|
||||
name: "{{ nname }}"
|
||||
register: result
|
||||
- name: Dump docker_network_info result
|
||||
debug: var=result
|
||||
- name: Inspect a present network
|
||||
docker_network_info:
|
||||
name: "{{ nname }}"
|
||||
register: result
|
||||
- name: Dump docker_network_info result
|
||||
debug: var=result
|
||||
|
||||
- name: "Comparison: use 'docker network inspect'"
|
||||
command: docker network inspect "{{ nname }}"
|
||||
register: docker_inspect
|
||||
ignore_errors: true
|
||||
- block:
|
||||
- set_fact:
|
||||
docker_inspect_result: "{{ docker_inspect.stdout | from_json }}"
|
||||
- name: Dump docker inspect result
|
||||
debug: var=docker_inspect_result
|
||||
when: docker_inspect is not failed
|
||||
- name: "Comparison: use 'docker network inspect'"
|
||||
command: docker network inspect "{{ nname }}"
|
||||
register: docker_inspect
|
||||
ignore_errors: true
|
||||
- block:
|
||||
- set_fact:
|
||||
docker_inspect_result: "{{ docker_inspect.stdout | from_json }}"
|
||||
- name: Dump docker inspect result
|
||||
debug: var=docker_inspect_result
|
||||
when: docker_inspect is not failed
|
||||
|
||||
- name: Cleanup
|
||||
docker_network:
|
||||
name: "{{ nname }}"
|
||||
state: absent
|
||||
force: true
|
||||
- name: Cleanup
|
||||
docker_network:
|
||||
name: "{{ nname }}"
|
||||
state: absent
|
||||
force: true
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result.exists
|
||||
- "'network' in result"
|
||||
- "result.network is truthy"
|
||||
- assert:
|
||||
that:
|
||||
- result.exists
|
||||
- "'network' in result"
|
||||
- "result.network is truthy"
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- "result.network == docker_inspect_result[0]"
|
||||
when: docker_inspect is not failed
|
||||
- assert:
|
||||
that:
|
||||
- "'is too new. Maximum supported API version is' in docker_inspect.stderr"
|
||||
when: docker_inspect is failed
|
||||
- assert:
|
||||
that:
|
||||
- "result.network == docker_inspect_result[0]"
|
||||
when: docker_inspect is not failed
|
||||
- assert:
|
||||
that:
|
||||
- "'is too new. Maximum supported API version is' in docker_inspect.stderr"
|
||||
when: docker_inspect is failed
|
||||
|
||||
when: docker_api_version is version('1.25', '>=')
|
||||
|
||||
|
||||
@ -10,30 +10,30 @@
|
||||
|
||||
# Run the tests
|
||||
- block:
|
||||
- include_tasks: test_node.yml
|
||||
- include_tasks: test_node.yml
|
||||
|
||||
always:
|
||||
- name: Cleanup (trying)
|
||||
docker_swarm:
|
||||
state: absent
|
||||
force: true
|
||||
diff: false
|
||||
ignore_errors: true
|
||||
- name: Cleanup (trying)
|
||||
docker_swarm:
|
||||
state: absent
|
||||
force: true
|
||||
diff: false
|
||||
ignore_errors: true
|
||||
|
||||
- name: Restart docker daemon
|
||||
service:
|
||||
name: docker
|
||||
state: restarted
|
||||
become: true
|
||||
- name: Wait for docker daemon to be fully restarted
|
||||
command: docker ps
|
||||
ignore_errors: true
|
||||
- name: Restart docker daemon
|
||||
service:
|
||||
name: docker
|
||||
state: restarted
|
||||
become: true
|
||||
- name: Wait for docker daemon to be fully restarted
|
||||
command: docker ps
|
||||
ignore_errors: true
|
||||
|
||||
- name: Cleanup
|
||||
docker_swarm:
|
||||
state: absent
|
||||
force: true
|
||||
diff: false
|
||||
- name: Cleanup
|
||||
docker_swarm:
|
||||
state: absent
|
||||
force: true
|
||||
diff: false
|
||||
|
||||
when: docker_py_version is version('2.4.0', '>=') and docker_api_version is version('1.25', '>=')
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -4,89 +4,89 @@
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
- block:
|
||||
- name: Make sure we're not already using Docker swarm
|
||||
docker_swarm:
|
||||
state: absent
|
||||
force: true
|
||||
- name: Make sure we're not already using Docker swarm
|
||||
docker_swarm:
|
||||
state: absent
|
||||
force: true
|
||||
|
||||
- name: Try to get docker_node_info when docker is not running in swarm mode
|
||||
docker_node_info:
|
||||
ignore_errors: true
|
||||
register: output
|
||||
- name: Try to get docker_node_info when docker is not running in swarm mode
|
||||
docker_node_info:
|
||||
ignore_errors: true
|
||||
register: output
|
||||
|
||||
- name: assert failure when called when swarm is not in use or not run on manager node
|
||||
assert:
|
||||
that:
|
||||
- 'output is failed'
|
||||
- 'output.msg == "Error running docker swarm module: must run on swarm manager node"'
|
||||
- name: assert failure when called when swarm is not in use or not run on manager node
|
||||
assert:
|
||||
that:
|
||||
- 'output is failed'
|
||||
- 'output.msg == "Error running docker swarm module: must run on swarm manager node"'
|
||||
|
||||
- name: Create a Swarm cluster
|
||||
docker_swarm:
|
||||
state: present
|
||||
advertise_addr: "{{ansible_default_ipv4.address | default('127.0.0.1')}}"
|
||||
register: output
|
||||
- name: Create a Swarm cluster
|
||||
docker_swarm:
|
||||
state: present
|
||||
advertise_addr: "{{ansible_default_ipv4.address | default('127.0.0.1')}}"
|
||||
register: output
|
||||
|
||||
- name: assert changed when create a new swarm cluster
|
||||
assert:
|
||||
that:
|
||||
- 'output is changed'
|
||||
- '(output.actions[0] | regex_search("New Swarm cluster created: ")) is truthy'
|
||||
- 'output.swarm_facts.JoinTokens.Manager is truthy'
|
||||
- 'output.swarm_facts.JoinTokens.Worker is truthy'
|
||||
- name: assert changed when create a new swarm cluster
|
||||
assert:
|
||||
that:
|
||||
- 'output is changed'
|
||||
- '(output.actions[0] | regex_search("New Swarm cluster created: ")) is truthy'
|
||||
- 'output.swarm_facts.JoinTokens.Manager is truthy'
|
||||
- 'output.swarm_facts.JoinTokens.Worker is truthy'
|
||||
|
||||
- name: Try to get docker_node_info when docker is running in swarm mode and as manager
|
||||
docker_node_info:
|
||||
register: output
|
||||
- name: Try to get docker_node_info when docker is running in swarm mode and as manager
|
||||
docker_node_info:
|
||||
register: output
|
||||
|
||||
- name: assert reading docker swarm node facts
|
||||
assert:
|
||||
that:
|
||||
- 'output.nodes | length > 0'
|
||||
- 'output.nodes[0].ID is string'
|
||||
- name: assert reading docker swarm node facts
|
||||
assert:
|
||||
that:
|
||||
- 'output.nodes | length > 0'
|
||||
- 'output.nodes[0].ID is string'
|
||||
|
||||
- name: Try to get docker_node_info using the self parameter
|
||||
docker_node_info:
|
||||
self: true
|
||||
register: output
|
||||
- name: Try to get docker_node_info using the self parameter
|
||||
docker_node_info:
|
||||
self: true
|
||||
register: output
|
||||
|
||||
- name: assert reading swarm facts with list of nodes option
|
||||
assert:
|
||||
that:
|
||||
- 'output.nodes | length == 1'
|
||||
- 'output.nodes[0].ID is string'
|
||||
- name: assert reading swarm facts with list of nodes option
|
||||
assert:
|
||||
that:
|
||||
- 'output.nodes | length == 1'
|
||||
- 'output.nodes[0].ID is string'
|
||||
|
||||
- name: Get local docker node name
|
||||
set_fact:
|
||||
localnodename: "{{ output.nodes[0].Description.Hostname }}"
|
||||
- name: Get local docker node name
|
||||
set_fact:
|
||||
localnodename: "{{ output.nodes[0].Description.Hostname }}"
|
||||
|
||||
|
||||
- name: Try to get docker_node_info using the local node name as parameter
|
||||
docker_node_info:
|
||||
name: "{{ localnodename }}"
|
||||
register: output
|
||||
- name: Try to get docker_node_info using the local node name as parameter
|
||||
docker_node_info:
|
||||
name: "{{ localnodename }}"
|
||||
register: output
|
||||
|
||||
- name: assert reading reading swarm facts and using node filter (random node name)
|
||||
assert:
|
||||
that:
|
||||
- 'output.nodes | length == 1'
|
||||
- 'output.nodes[0].ID is string'
|
||||
- name: assert reading reading swarm facts and using node filter (random node name)
|
||||
assert:
|
||||
that:
|
||||
- 'output.nodes | length == 1'
|
||||
- 'output.nodes[0].ID is string'
|
||||
|
||||
- name: Create random name
|
||||
set_fact:
|
||||
randomnodename: "{{ 'node-%0x' % ((2**32) | random) }}"
|
||||
- name: Create random name
|
||||
set_fact:
|
||||
randomnodename: "{{ 'node-%0x' % ((2**32) | random) }}"
|
||||
|
||||
- name: Try to get docker_node_info using random node name as parameter
|
||||
docker_node_info:
|
||||
name: "{{ randomnodename }}"
|
||||
register: output
|
||||
- name: Try to get docker_node_info using random node name as parameter
|
||||
docker_node_info:
|
||||
name: "{{ randomnodename }}"
|
||||
register: output
|
||||
|
||||
- name: assert reading reading swarm facts and using node filter (random node name)
|
||||
assert:
|
||||
that:
|
||||
- 'output.nodes | length == 0'
|
||||
- name: assert reading reading swarm facts and using node filter (random node name)
|
||||
assert:
|
||||
that:
|
||||
- 'output.nodes | length == 0'
|
||||
|
||||
always:
|
||||
- name: Cleanup
|
||||
docker_swarm:
|
||||
state: absent
|
||||
force: true
|
||||
- name: Cleanup
|
||||
docker_swarm:
|
||||
state: absent
|
||||
force: true
|
||||
|
||||
@ -126,22 +126,22 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- create_1_check is changed
|
||||
- create_1 is changed
|
||||
- create_2_check is not changed
|
||||
- create_2 is not changed
|
||||
- create_3_check is changed
|
||||
- create_3 is changed
|
||||
- create_4_check is not changed
|
||||
- create_4 is not changed
|
||||
- absent_1_check is changed
|
||||
- absent_1 is changed
|
||||
- absent_2_check is not changed
|
||||
- absent_2 is not changed
|
||||
- absent_3_check is changed
|
||||
- absent_3 is changed
|
||||
- absent_4_check is not changed
|
||||
- absent_4 is not changed
|
||||
- create_1_check is changed
|
||||
- create_1 is changed
|
||||
- create_2_check is not changed
|
||||
- create_2 is not changed
|
||||
- create_3_check is changed
|
||||
- create_3 is changed
|
||||
- create_4_check is not changed
|
||||
- create_4 is not changed
|
||||
- absent_1_check is changed
|
||||
- absent_1 is changed
|
||||
- absent_2_check is not changed
|
||||
- absent_2 is not changed
|
||||
- absent_3_check is changed
|
||||
- absent_3 is changed
|
||||
- absent_4_check is not changed
|
||||
- absent_4 is not changed
|
||||
|
||||
############ Plugin_Options ############
|
||||
########################################
|
||||
@ -186,7 +186,7 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- create_1 is changed
|
||||
- create_2 is not changed
|
||||
- update_1 is changed
|
||||
- update_2 is not changed
|
||||
- create_1 is changed
|
||||
- create_2 is not changed
|
||||
- update_1 is changed
|
||||
- update_2 is not changed
|
||||
|
||||
@ -66,14 +66,14 @@
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- create_1 is changed
|
||||
- create_2 is not changed
|
||||
- create_3 is changed
|
||||
- create_4 is not changed
|
||||
- absent_1 is changed
|
||||
- absent_2 is not changed
|
||||
- absent_3 is changed
|
||||
- absent_4 is not changed
|
||||
- create_1 is changed
|
||||
- create_2 is not changed
|
||||
- create_3 is changed
|
||||
- create_4 is not changed
|
||||
- absent_1 is changed
|
||||
- absent_2 is not changed
|
||||
- absent_3 is changed
|
||||
- absent_4 is not changed
|
||||
|
||||
- name: Cleanup plugin with an alias
|
||||
docker_plugin:
|
||||
|
||||
@ -15,159 +15,159 @@
|
||||
vname: "{{ 'ansible-volume-%0x' % ((2**32) | random) }}"
|
||||
|
||||
- block:
|
||||
# Create objects to be pruned
|
||||
- name: Create container (without volume)
|
||||
docker_container:
|
||||
name: "{{ cname }}"
|
||||
image: "{{ docker_test_image_hello_world }}"
|
||||
state: present
|
||||
register: container
|
||||
- name: Create network
|
||||
docker_network:
|
||||
name: "{{ nname }}"
|
||||
state: present
|
||||
register: network
|
||||
- name: Create named volume
|
||||
docker_volume:
|
||||
name: "{{ vname }}"
|
||||
state: present
|
||||
register: volume
|
||||
- name: Create anonymous volume
|
||||
command: docker volume create
|
||||
register: volume_anon
|
||||
# Create objects to be pruned
|
||||
- name: Create container (without volume)
|
||||
docker_container:
|
||||
name: "{{ cname }}"
|
||||
image: "{{ docker_test_image_hello_world }}"
|
||||
state: present
|
||||
register: container
|
||||
- name: Create network
|
||||
docker_network:
|
||||
name: "{{ nname }}"
|
||||
state: present
|
||||
register: network
|
||||
- name: Create named volume
|
||||
docker_volume:
|
||||
name: "{{ vname }}"
|
||||
state: present
|
||||
register: volume
|
||||
- name: Create anonymous volume
|
||||
command: docker volume create
|
||||
register: volume_anon
|
||||
|
||||
- name: List volumes
|
||||
command: docker volume list
|
||||
- name: List volumes
|
||||
command: docker volume list
|
||||
|
||||
# Prune objects
|
||||
- name: Prune everything
|
||||
docker_prune:
|
||||
containers: true
|
||||
images: true
|
||||
networks: true
|
||||
volumes: true
|
||||
builder_cache: true
|
||||
register: result
|
||||
|
||||
# Analyze result
|
||||
- name: Show results
|
||||
debug:
|
||||
var: result
|
||||
- name: General checks
|
||||
assert:
|
||||
that:
|
||||
- result is changed
|
||||
# containers
|
||||
- container.container.Id in result.containers
|
||||
- "'containers_space_reclaimed' in result"
|
||||
# images
|
||||
- "'images_space_reclaimed' in result"
|
||||
# networks
|
||||
- network.network.Name in result.networks
|
||||
# volumes
|
||||
- volume_anon.stdout in result.volumes
|
||||
- "'volumes_space_reclaimed' in result"
|
||||
# builder_cache
|
||||
- "'builder_cache_space_reclaimed' in result"
|
||||
- name: API-version specific volumes check (API version before 1.42)
|
||||
assert:
|
||||
that:
|
||||
# For API version 1.41 and before, pruning always considers all volumes
|
||||
- volume.volume.Name in result.volumes
|
||||
when: docker_api_version is version('1.42', '<')
|
||||
- name: API-version specific volumes check (API version 1.42+)
|
||||
assert:
|
||||
that:
|
||||
# For API version 1.41 and before, pruning considers only anonymous volumes,
|
||||
# so our named container is not removed
|
||||
- volume.volume.Name not in result.volumes
|
||||
when: docker_api_version is version('1.42', '>=')
|
||||
|
||||
# Prune objects again
|
||||
- name: Prune everything again (should have no change)
|
||||
docker_prune:
|
||||
containers: true
|
||||
images: true
|
||||
networks: true
|
||||
volumes: true
|
||||
builder_cache: true
|
||||
register: result
|
||||
|
||||
# Analyze result
|
||||
- name: Show results
|
||||
debug:
|
||||
var: result
|
||||
- name: General checks
|
||||
assert:
|
||||
that:
|
||||
- result is not changed
|
||||
# containers
|
||||
- result.containers == []
|
||||
- result.containers_space_reclaimed == 0
|
||||
# images
|
||||
- result.images == []
|
||||
- result.images_space_reclaimed == 0
|
||||
# networks
|
||||
- result.networks == []
|
||||
# volumes
|
||||
- result.volumes == []
|
||||
# builder_cache
|
||||
- result.builder_cache_space_reclaimed == 0
|
||||
|
||||
# Test with filters
|
||||
- name: Prune with filters
|
||||
docker_prune:
|
||||
images: true
|
||||
images_filters:
|
||||
dangling: true
|
||||
register: result
|
||||
|
||||
- name: Show results
|
||||
debug:
|
||||
var: result
|
||||
|
||||
- name: Prune build cache (API version 1.39+)
|
||||
when: docker_api_version is version('1.39', '>=')
|
||||
block:
|
||||
- name: Prune build cache with option
|
||||
docker_prune:
|
||||
builder_cache: true
|
||||
builder_cache_all: true
|
||||
builder_cache_filters:
|
||||
until: 10m
|
||||
builder_cache_keep_storage: 1MB
|
||||
register: result
|
||||
|
||||
- name: Show results
|
||||
debug:
|
||||
var: result
|
||||
|
||||
- name: Check results
|
||||
assert:
|
||||
that:
|
||||
- "'builder_cache_space_reclaimed' in result"
|
||||
- "'builder_cache_caches_deleted' in result"
|
||||
|
||||
- name: Prune volumes with all filter (API version 1.42+)
|
||||
when: docker_api_version is version('1.42', '>=')
|
||||
block:
|
||||
- name: Prune with filters
|
||||
# Prune objects
|
||||
- name: Prune everything
|
||||
docker_prune:
|
||||
containers: true
|
||||
images: true
|
||||
networks: true
|
||||
volumes: true
|
||||
volumes_filters:
|
||||
all: true
|
||||
builder_cache: true
|
||||
register: result
|
||||
|
||||
# Analyze result
|
||||
- name: Show results
|
||||
debug:
|
||||
var: result
|
||||
|
||||
- name: Check results
|
||||
- name: General checks
|
||||
assert:
|
||||
that:
|
||||
- result is changed
|
||||
- volume.volume.Name in result.volumes
|
||||
# containers
|
||||
- container.container.Id in result.containers
|
||||
- "'containers_space_reclaimed' in result"
|
||||
# images
|
||||
- "'images_space_reclaimed' in result"
|
||||
# networks
|
||||
- network.network.Name in result.networks
|
||||
# volumes
|
||||
- volume_anon.stdout in result.volumes
|
||||
- "'volumes_space_reclaimed' in result"
|
||||
# builder_cache
|
||||
- "'builder_cache_space_reclaimed' in result"
|
||||
- name: API-version specific volumes check (API version before 1.42)
|
||||
assert:
|
||||
that:
|
||||
# For API version 1.41 and before, pruning always considers all volumes
|
||||
- volume.volume.Name in result.volumes
|
||||
when: docker_api_version is version('1.42', '<')
|
||||
- name: API-version specific volumes check (API version 1.42+)
|
||||
assert:
|
||||
that:
|
||||
# For API version 1.41 and before, pruning considers only anonymous volumes,
|
||||
# so our named container is not removed
|
||||
- volume.volume.Name not in result.volumes
|
||||
when: docker_api_version is version('1.42', '>=')
|
||||
|
||||
# Prune objects again
|
||||
- name: Prune everything again (should have no change)
|
||||
docker_prune:
|
||||
containers: true
|
||||
images: true
|
||||
networks: true
|
||||
volumes: true
|
||||
builder_cache: true
|
||||
register: result
|
||||
|
||||
# Analyze result
|
||||
- name: Show results
|
||||
debug:
|
||||
var: result
|
||||
- name: General checks
|
||||
assert:
|
||||
that:
|
||||
- result is not changed
|
||||
# containers
|
||||
- result.containers == []
|
||||
- result.containers_space_reclaimed == 0
|
||||
# images
|
||||
- result.images == []
|
||||
- result.images_space_reclaimed == 0
|
||||
# networks
|
||||
- result.networks == []
|
||||
# volumes
|
||||
- result.volumes == []
|
||||
# builder_cache
|
||||
- result.builder_cache_space_reclaimed == 0
|
||||
|
||||
# Test with filters
|
||||
- name: Prune with filters
|
||||
docker_prune:
|
||||
images: true
|
||||
images_filters:
|
||||
dangling: true
|
||||
register: result
|
||||
|
||||
- name: Show results
|
||||
debug:
|
||||
var: result
|
||||
|
||||
- name: Prune build cache (API version 1.39+)
|
||||
when: docker_api_version is version('1.39', '>=')
|
||||
block:
|
||||
- name: Prune build cache with option
|
||||
docker_prune:
|
||||
builder_cache: true
|
||||
builder_cache_all: true
|
||||
builder_cache_filters:
|
||||
until: 10m
|
||||
builder_cache_keep_storage: 1MB
|
||||
register: result
|
||||
|
||||
- name: Show results
|
||||
debug:
|
||||
var: result
|
||||
|
||||
- name: Check results
|
||||
assert:
|
||||
that:
|
||||
- "'builder_cache_space_reclaimed' in result"
|
||||
- "'builder_cache_caches_deleted' in result"
|
||||
|
||||
- name: Prune volumes with all filter (API version 1.42+)
|
||||
when: docker_api_version is version('1.42', '>=')
|
||||
block:
|
||||
- name: Prune with filters
|
||||
docker_prune:
|
||||
volumes: true
|
||||
volumes_filters:
|
||||
all: true
|
||||
register: result
|
||||
|
||||
- name: Show results
|
||||
debug:
|
||||
var: result
|
||||
|
||||
- name: Check results
|
||||
assert:
|
||||
that:
|
||||
- result is changed
|
||||
- volume.volume.Name in result.volumes
|
||||
- "'volumes_space_reclaimed' in result"
|
||||
|
||||
when: docker_api_version is version('1.25', '>=')
|
||||
|
||||
|
||||
@ -4,219 +4,219 @@
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
- block:
|
||||
- name: Make sure we're not already using Docker swarm
|
||||
docker_swarm:
|
||||
state: absent
|
||||
force: true
|
||||
- name: Make sure we're not already using Docker swarm
|
||||
docker_swarm:
|
||||
state: absent
|
||||
force: true
|
||||
|
||||
- name: Create a Swarm cluster
|
||||
docker_swarm:
|
||||
state: present
|
||||
advertise_addr: "{{ ansible_default_ipv4.address | default('127.0.0.1') }}"
|
||||
- name: Create a Swarm cluster
|
||||
docker_swarm:
|
||||
state: present
|
||||
advertise_addr: "{{ ansible_default_ipv4.address | default('127.0.0.1') }}"
|
||||
|
||||
- name: Parameter name should be required
|
||||
docker_secret:
|
||||
state: present
|
||||
ignore_errors: true
|
||||
register: output
|
||||
- name: Parameter name should be required
|
||||
docker_secret:
|
||||
state: present
|
||||
ignore_errors: true
|
||||
register: output
|
||||
|
||||
- name: assert failure when called with no name
|
||||
assert:
|
||||
that:
|
||||
- 'output.failed'
|
||||
- 'output.msg == "missing required arguments: name"'
|
||||
- name: assert failure when called with no name
|
||||
assert:
|
||||
that:
|
||||
- 'output.failed'
|
||||
- 'output.msg == "missing required arguments: name"'
|
||||
|
||||
- name: Test parameters
|
||||
docker_secret:
|
||||
name: foo
|
||||
state: present
|
||||
ignore_errors: true
|
||||
register: output
|
||||
- name: Test parameters
|
||||
docker_secret:
|
||||
name: foo
|
||||
state: present
|
||||
ignore_errors: true
|
||||
register: output
|
||||
|
||||
- name: assert failure when called with no data
|
||||
assert:
|
||||
that:
|
||||
- 'output.failed'
|
||||
- 'output.msg == "state is present but any of the following are missing: data, data_src"'
|
||||
- name: assert failure when called with no data
|
||||
assert:
|
||||
that:
|
||||
- 'output.failed'
|
||||
- 'output.msg == "state is present but any of the following are missing: data, data_src"'
|
||||
|
||||
- name: Create secret
|
||||
docker_secret:
|
||||
name: db_password
|
||||
data: opensesame!
|
||||
state: present
|
||||
register: output
|
||||
- name: Create secret
|
||||
docker_secret:
|
||||
name: db_password
|
||||
data: opensesame!
|
||||
state: present
|
||||
register: output
|
||||
|
||||
- name: Create variable secret_id
|
||||
set_fact:
|
||||
secret_id: "{{ output.secret_id }}"
|
||||
- name: Create variable secret_id
|
||||
set_fact:
|
||||
secret_id: "{{ output.secret_id }}"
|
||||
|
||||
- name: Inspect secret
|
||||
command: "docker secret inspect {{ secret_id }}"
|
||||
register: inspect
|
||||
ignore_errors: true
|
||||
- name: Inspect secret
|
||||
command: "docker secret inspect {{ secret_id }}"
|
||||
register: inspect
|
||||
ignore_errors: true
|
||||
|
||||
- debug: var=inspect
|
||||
- debug: var=inspect
|
||||
|
||||
- name: assert secret creation succeeded
|
||||
assert:
|
||||
that:
|
||||
- "'db_password' in inspect.stdout"
|
||||
- "'ansible_key' in inspect.stdout"
|
||||
when: inspect is not failed
|
||||
- assert:
|
||||
that:
|
||||
- "'is too new. Maximum supported API version is' in inspect.stderr"
|
||||
when: inspect is failed
|
||||
- name: assert secret creation succeeded
|
||||
assert:
|
||||
that:
|
||||
- "'db_password' in inspect.stdout"
|
||||
- "'ansible_key' in inspect.stdout"
|
||||
when: inspect is not failed
|
||||
- assert:
|
||||
that:
|
||||
- "'is too new. Maximum supported API version is' in inspect.stderr"
|
||||
when: inspect is failed
|
||||
|
||||
- name: Create secret again
|
||||
docker_secret:
|
||||
name: db_password
|
||||
data: opensesame!
|
||||
state: present
|
||||
register: output
|
||||
- name: Create secret again
|
||||
docker_secret:
|
||||
name: db_password
|
||||
data: opensesame!
|
||||
state: present
|
||||
register: output
|
||||
|
||||
- name: assert create secret is idempotent
|
||||
assert:
|
||||
that:
|
||||
- not output.changed
|
||||
- name: assert create secret is idempotent
|
||||
assert:
|
||||
that:
|
||||
- not output.changed
|
||||
|
||||
- name: Write secret into file
|
||||
copy:
|
||||
dest: "{{ remote_tmp_dir }}/data"
|
||||
content: |-
|
||||
opensesame!
|
||||
- name: Write secret into file
|
||||
copy:
|
||||
dest: "{{ remote_tmp_dir }}/data"
|
||||
content: |-
|
||||
opensesame!
|
||||
|
||||
- name: Create secret again (from file)
|
||||
docker_secret:
|
||||
name: db_password
|
||||
data_src: "{{ remote_tmp_dir }}/data"
|
||||
state: present
|
||||
register: output
|
||||
- name: Create secret again (from file)
|
||||
docker_secret:
|
||||
name: db_password
|
||||
data_src: "{{ remote_tmp_dir }}/data"
|
||||
state: present
|
||||
register: output
|
||||
|
||||
- name: assert create secret is idempotent
|
||||
assert:
|
||||
that:
|
||||
- not output.changed
|
||||
- name: assert create secret is idempotent
|
||||
assert:
|
||||
that:
|
||||
- not output.changed
|
||||
|
||||
- name: Create secret again (base64)
|
||||
docker_secret:
|
||||
name: db_password
|
||||
data: b3BlbnNlc2FtZSE=
|
||||
data_is_b64: true
|
||||
state: present
|
||||
register: output
|
||||
- name: Create secret again (base64)
|
||||
docker_secret:
|
||||
name: db_password
|
||||
data: b3BlbnNlc2FtZSE=
|
||||
data_is_b64: true
|
||||
state: present
|
||||
register: output
|
||||
|
||||
- name: assert create secret (base64) is idempotent
|
||||
assert:
|
||||
that:
|
||||
- not output.changed
|
||||
- name: assert create secret (base64) is idempotent
|
||||
assert:
|
||||
that:
|
||||
- not output.changed
|
||||
|
||||
- name: Update secret
|
||||
docker_secret:
|
||||
name: db_password
|
||||
data: newpassword!
|
||||
state: present
|
||||
register: output
|
||||
- name: Update secret
|
||||
docker_secret:
|
||||
name: db_password
|
||||
data: newpassword!
|
||||
state: present
|
||||
register: output
|
||||
|
||||
- name: assert secret was updated
|
||||
assert:
|
||||
that:
|
||||
- output.changed
|
||||
- output.secret_id != secret_id
|
||||
- name: assert secret was updated
|
||||
assert:
|
||||
that:
|
||||
- output.changed
|
||||
- output.secret_id != secret_id
|
||||
|
||||
- name: Remove secret
|
||||
docker_secret:
|
||||
name: db_password
|
||||
state: absent
|
||||
- name: Remove secret
|
||||
docker_secret:
|
||||
name: db_password
|
||||
state: absent
|
||||
|
||||
- name: Check that secret is removed
|
||||
command: "docker secret inspect {{ secret_id }}"
|
||||
register: output
|
||||
ignore_errors: true
|
||||
- name: Check that secret is removed
|
||||
command: "docker secret inspect {{ secret_id }}"
|
||||
register: output
|
||||
ignore_errors: true
|
||||
|
||||
- name: assert secret was removed
|
||||
assert:
|
||||
that:
|
||||
- output.failed
|
||||
- name: assert secret was removed
|
||||
assert:
|
||||
that:
|
||||
- output.failed
|
||||
|
||||
# Rolling update
|
||||
# Rolling update
|
||||
|
||||
- name: Create rolling secret
|
||||
docker_secret:
|
||||
name: rolling_password
|
||||
data: opensesame!
|
||||
rolling_versions: true
|
||||
state: present
|
||||
register: original_output
|
||||
- name: Create rolling secret
|
||||
docker_secret:
|
||||
name: rolling_password
|
||||
data: opensesame!
|
||||
rolling_versions: true
|
||||
state: present
|
||||
register: original_output
|
||||
|
||||
- name: Create variable secret_id
|
||||
set_fact:
|
||||
secret_id: "{{ original_output.secret_id }}"
|
||||
- name: Create variable secret_id
|
||||
set_fact:
|
||||
secret_id: "{{ original_output.secret_id }}"
|
||||
|
||||
- name: Inspect secret
|
||||
command: "docker secret inspect {{ secret_id }}"
|
||||
register: inspect
|
||||
ignore_errors: true
|
||||
- name: Inspect secret
|
||||
command: "docker secret inspect {{ secret_id }}"
|
||||
register: inspect
|
||||
ignore_errors: true
|
||||
|
||||
- debug: var=inspect
|
||||
- debug: var=inspect
|
||||
|
||||
- name: assert secret creation succeeded
|
||||
assert:
|
||||
that:
|
||||
- "'rolling_password' in inspect.stdout"
|
||||
- "'ansible_key' in inspect.stdout"
|
||||
- "'ansible_version' in inspect.stdout"
|
||||
- original_output.secret_name == 'rolling_password_v1'
|
||||
when: inspect is not failed
|
||||
- assert:
|
||||
that:
|
||||
- "'is too new. Maximum supported API version is' in inspect.stderr"
|
||||
when: inspect is failed
|
||||
- name: assert secret creation succeeded
|
||||
assert:
|
||||
that:
|
||||
- "'rolling_password' in inspect.stdout"
|
||||
- "'ansible_key' in inspect.stdout"
|
||||
- "'ansible_version' in inspect.stdout"
|
||||
- original_output.secret_name == 'rolling_password_v1'
|
||||
when: inspect is not failed
|
||||
- assert:
|
||||
that:
|
||||
- "'is too new. Maximum supported API version is' in inspect.stderr"
|
||||
when: inspect is failed
|
||||
|
||||
- name: Create secret again
|
||||
docker_secret:
|
||||
name: rolling_password
|
||||
data: newpassword!
|
||||
rolling_versions: true
|
||||
state: present
|
||||
register: new_output
|
||||
- name: Create secret again
|
||||
docker_secret:
|
||||
name: rolling_password
|
||||
data: newpassword!
|
||||
rolling_versions: true
|
||||
state: present
|
||||
register: new_output
|
||||
|
||||
- name: assert that new version is created
|
||||
assert:
|
||||
that:
|
||||
- new_output.changed
|
||||
- new_output.secret_id != original_output.secret_id
|
||||
- new_output.secret_name != original_output.secret_name
|
||||
- new_output.secret_name == 'rolling_password_v2'
|
||||
- name: assert that new version is created
|
||||
assert:
|
||||
that:
|
||||
- new_output.changed
|
||||
- new_output.secret_id != original_output.secret_id
|
||||
- new_output.secret_name != original_output.secret_name
|
||||
- new_output.secret_name == 'rolling_password_v2'
|
||||
|
||||
- name: Remove rolling secrets
|
||||
docker_secret:
|
||||
name: rolling_password
|
||||
rolling_versions: true
|
||||
state: absent
|
||||
- name: Remove rolling secrets
|
||||
docker_secret:
|
||||
name: rolling_password
|
||||
rolling_versions: true
|
||||
state: absent
|
||||
|
||||
- name: Check that secret is removed
|
||||
command: "docker secret inspect {{ original_output.secret_id }}"
|
||||
register: output
|
||||
ignore_errors: true
|
||||
- name: Check that secret is removed
|
||||
command: "docker secret inspect {{ original_output.secret_id }}"
|
||||
register: output
|
||||
ignore_errors: true
|
||||
|
||||
- name: assert secret was removed
|
||||
assert:
|
||||
that:
|
||||
- output.failed
|
||||
- name: assert secret was removed
|
||||
assert:
|
||||
that:
|
||||
- output.failed
|
||||
|
||||
- name: Check that secret is removed
|
||||
command: "docker secret inspect {{ new_output.secret_id }}"
|
||||
register: output
|
||||
ignore_errors: true
|
||||
- name: Check that secret is removed
|
||||
command: "docker secret inspect {{ new_output.secret_id }}"
|
||||
register: output
|
||||
ignore_errors: true
|
||||
|
||||
- name: assert secret was removed
|
||||
assert:
|
||||
that:
|
||||
- output.failed
|
||||
- name: assert secret was removed
|
||||
assert:
|
||||
that:
|
||||
- output.failed
|
||||
|
||||
always:
|
||||
- name: Remove Swarm cluster
|
||||
docker_swarm:
|
||||
state: absent
|
||||
force: true
|
||||
- name: Remove Swarm cluster
|
||||
docker_swarm:
|
||||
state: absent
|
||||
force: true
|
||||
|
||||
@ -4,114 +4,114 @@
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
- block:
|
||||
- name: Make sure we're not already using Docker swarm
|
||||
docker_swarm:
|
||||
state: absent
|
||||
force: true
|
||||
- name: Make sure we're not already using Docker swarm
|
||||
docker_swarm:
|
||||
state: absent
|
||||
force: true
|
||||
|
||||
- name: Create a Swarm cluster
|
||||
docker_swarm:
|
||||
state: present
|
||||
advertise_addr: "{{ ansible_default_ipv4.address | default('127.0.0.1') }}"
|
||||
- name: Create a Swarm cluster
|
||||
docker_swarm:
|
||||
state: present
|
||||
advertise_addr: "{{ ansible_default_ipv4.address | default('127.0.0.1') }}"
|
||||
|
||||
- name: install docker_stack python requirements
|
||||
pip:
|
||||
name: jsondiff,pyyaml
|
||||
- name: install docker_stack python requirements
|
||||
pip:
|
||||
name: jsondiff,pyyaml
|
||||
|
||||
- name: Create a stack without name
|
||||
register: output
|
||||
docker_stack:
|
||||
state: present
|
||||
ignore_errors: true
|
||||
- name: Create a stack without name
|
||||
register: output
|
||||
docker_stack:
|
||||
state: present
|
||||
ignore_errors: true
|
||||
|
||||
- name: assert failure when name not set
|
||||
assert:
|
||||
that:
|
||||
- output is failed
|
||||
- 'output.msg == "missing required arguments: name"'
|
||||
- name: assert failure when name not set
|
||||
assert:
|
||||
that:
|
||||
- output is failed
|
||||
- 'output.msg == "missing required arguments: name"'
|
||||
|
||||
- name: Create a stack without compose
|
||||
register: output
|
||||
docker_stack:
|
||||
name: test_stack
|
||||
ignore_errors: true
|
||||
- name: Create a stack without compose
|
||||
register: output
|
||||
docker_stack:
|
||||
name: test_stack
|
||||
ignore_errors: true
|
||||
|
||||
- name: assert failure when compose not set
|
||||
assert:
|
||||
that:
|
||||
- output is failed
|
||||
- 'output.msg == "compose parameter must be a list containing at least one element"'
|
||||
- name: assert failure when compose not set
|
||||
assert:
|
||||
that:
|
||||
- output is failed
|
||||
- 'output.msg == "compose parameter must be a list containing at least one element"'
|
||||
|
||||
- name: Ensure stack is absent
|
||||
register: output
|
||||
docker_stack:
|
||||
state: absent
|
||||
name: test_stack
|
||||
absent_retries: 30
|
||||
- name: Ensure stack is absent
|
||||
register: output
|
||||
docker_stack:
|
||||
state: absent
|
||||
name: test_stack
|
||||
absent_retries: 30
|
||||
|
||||
- name: Template compose files
|
||||
template:
|
||||
src: "{{item}}"
|
||||
dest: "{{remote_tmp_dir}}/"
|
||||
with_items:
|
||||
- stack_compose_base.yml
|
||||
- stack_compose_overrides.yml
|
||||
- name: Template compose files
|
||||
template:
|
||||
src: "{{item}}"
|
||||
dest: "{{remote_tmp_dir}}/"
|
||||
with_items:
|
||||
- stack_compose_base.yml
|
||||
- stack_compose_overrides.yml
|
||||
|
||||
- name: Create stack with compose file
|
||||
register: output
|
||||
docker_stack:
|
||||
state: present
|
||||
name: test_stack
|
||||
compose:
|
||||
- "{{remote_tmp_dir}}/stack_compose_base.yml"
|
||||
- name: Create stack with compose file
|
||||
register: output
|
||||
docker_stack:
|
||||
state: present
|
||||
name: test_stack
|
||||
compose:
|
||||
- "{{remote_tmp_dir}}/stack_compose_base.yml"
|
||||
|
||||
- name: assert test_stack changed on stack creation with compose file
|
||||
assert:
|
||||
that:
|
||||
- output is changed
|
||||
- name: assert test_stack changed on stack creation with compose file
|
||||
assert:
|
||||
that:
|
||||
- output is changed
|
||||
|
||||
# FIXME: updating the stack prevents leaving the swarm on Shippable
|
||||
#- name: Update stack with YAML
|
||||
# register: output
|
||||
# docker_stack:
|
||||
# state: present
|
||||
# name: test_stack
|
||||
# compose:
|
||||
# - "{{stack_compose_base}}"
|
||||
# - "{{stack_compose_overrides}}"
|
||||
#
|
||||
#- name: assert test_stack correctly changed on update with yaml
|
||||
# assert:
|
||||
# that:
|
||||
# - output is changed
|
||||
# - output.stack_spec_diff == stack_update_expected_diff
|
||||
# FIXME: updating the stack prevents leaving the swarm on Shippable
|
||||
# - name: Update stack with YAML
|
||||
# register: output
|
||||
# docker_stack:
|
||||
# state: present
|
||||
# name: test_stack
|
||||
# compose:
|
||||
# - "{{stack_compose_base}}"
|
||||
# - "{{stack_compose_overrides}}"
|
||||
#
|
||||
# - name: assert test_stack correctly changed on update with yaml
|
||||
# assert:
|
||||
# that:
|
||||
# - output is changed
|
||||
# - output.stack_spec_diff == stack_update_expected_diff
|
||||
|
||||
- name: Delete stack
|
||||
register: output
|
||||
docker_stack:
|
||||
state: absent
|
||||
name: test_stack
|
||||
absent_retries: 30
|
||||
- name: Delete stack
|
||||
register: output
|
||||
docker_stack:
|
||||
state: absent
|
||||
name: test_stack
|
||||
absent_retries: 30
|
||||
|
||||
- name: assert delete of existing stack returns changed
|
||||
assert:
|
||||
that:
|
||||
- output is changed
|
||||
- name: assert delete of existing stack returns changed
|
||||
assert:
|
||||
that:
|
||||
- output is changed
|
||||
|
||||
- name: Delete stack again
|
||||
register: output
|
||||
docker_stack:
|
||||
state: absent
|
||||
name: test_stack
|
||||
absent_retries: 30
|
||||
- name: Delete stack again
|
||||
register: output
|
||||
docker_stack:
|
||||
state: absent
|
||||
name: test_stack
|
||||
absent_retries: 30
|
||||
|
||||
- name: assert state=absent idempotency
|
||||
assert:
|
||||
that:
|
||||
- output is not changed
|
||||
- name: assert state=absent idempotency
|
||||
assert:
|
||||
that:
|
||||
- output is not changed
|
||||
|
||||
always:
|
||||
- name: Remove a Swarm cluster
|
||||
docker_swarm:
|
||||
state: absent
|
||||
force: true
|
||||
- name: Remove a Swarm cluster
|
||||
docker_swarm:
|
||||
state: absent
|
||||
force: true
|
||||
|
||||
@ -5,6 +5,6 @@
|
||||
|
||||
version: '3'
|
||||
services:
|
||||
busybox:
|
||||
image: "{{ docker_test_image_busybox }}"
|
||||
command: sleep 3600
|
||||
busybox:
|
||||
image: "{{ docker_test_image_busybox }}"
|
||||
command: sleep 3600
|
||||
|
||||
@ -5,6 +5,6 @@
|
||||
|
||||
version: '3'
|
||||
services:
|
||||
busybox:
|
||||
environment:
|
||||
envvar: value
|
||||
busybox:
|
||||
environment:
|
||||
envvar: value
|
||||
|
||||
@ -4,17 +4,17 @@
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
stack_compose_base:
|
||||
version: '3'
|
||||
services:
|
||||
busybox:
|
||||
image: "{{ docker_test_image_busybox }}"
|
||||
command: sleep 3600
|
||||
version: '3'
|
||||
services:
|
||||
busybox:
|
||||
image: "{{ docker_test_image_busybox }}"
|
||||
command: sleep 3600
|
||||
|
||||
stack_compose_overrides:
|
||||
version: '3'
|
||||
services:
|
||||
busybox:
|
||||
environment:
|
||||
envvar: value
|
||||
version: '3'
|
||||
services:
|
||||
busybox:
|
||||
environment:
|
||||
envvar: value
|
||||
|
||||
stack_update_expected_diff: '{"test_stack_busybox": {"TaskTemplate": {"ContainerSpec": {"Env": ["envvar=value"]}}}}'
|
||||
|
||||
@ -4,75 +4,75 @@
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
- block:
|
||||
- name: Make sure we're not already using Docker swarm
|
||||
docker_swarm:
|
||||
state: absent
|
||||
force: true
|
||||
- name: Make sure we're not already using Docker swarm
|
||||
docker_swarm:
|
||||
state: absent
|
||||
force: true
|
||||
|
||||
- name: Get docker_stack_info when docker is not running in swarm mode
|
||||
docker_stack_info:
|
||||
ignore_errors: true
|
||||
register: output
|
||||
- name: Get docker_stack_info when docker is not running in swarm mode
|
||||
docker_stack_info:
|
||||
ignore_errors: true
|
||||
register: output
|
||||
|
||||
- name: Assert failure when called when swarm is not running
|
||||
assert:
|
||||
that:
|
||||
- 'output is failed'
|
||||
- '"Error response from daemon: This node is not a swarm manager" in output.msg'
|
||||
- name: Assert failure when called when swarm is not running
|
||||
assert:
|
||||
that:
|
||||
- 'output is failed'
|
||||
- '"Error response from daemon: This node is not a swarm manager" in output.msg'
|
||||
|
||||
- name: Create a swarm cluster
|
||||
docker_swarm:
|
||||
state: present
|
||||
advertise_addr: "{{ ansible_default_ipv4.address | default('127.0.0.1') }}"
|
||||
- name: Create a swarm cluster
|
||||
docker_swarm:
|
||||
state: present
|
||||
advertise_addr: "{{ ansible_default_ipv4.address | default('127.0.0.1') }}"
|
||||
|
||||
- name: Get docker_stack_info when docker is running and not stack available
|
||||
docker_stack_info:
|
||||
register: output
|
||||
- name: Get docker_stack_info when docker is running and not stack available
|
||||
docker_stack_info:
|
||||
register: output
|
||||
|
||||
- name: Assert stack facts
|
||||
assert:
|
||||
that:
|
||||
- 'output.results | type_debug == "list"'
|
||||
- 'output.results | length == 0'
|
||||
- name: Assert stack facts
|
||||
assert:
|
||||
that:
|
||||
- 'output.results | type_debug == "list"'
|
||||
- 'output.results | length == 0'
|
||||
|
||||
- name: Template compose files
|
||||
template:
|
||||
src: "{{ item }}"
|
||||
dest: "{{ remote_tmp_dir }}/"
|
||||
with_items:
|
||||
- stack_compose_base.yml
|
||||
- stack_compose_overrides.yml
|
||||
- name: Template compose files
|
||||
template:
|
||||
src: "{{ item }}"
|
||||
dest: "{{ remote_tmp_dir }}/"
|
||||
with_items:
|
||||
- stack_compose_base.yml
|
||||
- stack_compose_overrides.yml
|
||||
|
||||
- name: Install docker_stack python requirements
|
||||
pip:
|
||||
name: jsondiff,pyyaml
|
||||
- name: Install docker_stack python requirements
|
||||
pip:
|
||||
name: jsondiff,pyyaml
|
||||
|
||||
- name: Create stack with compose file
|
||||
register: output
|
||||
docker_stack:
|
||||
state: present
|
||||
name: test_stack
|
||||
compose:
|
||||
- "{{ remote_tmp_dir }}/stack_compose_base.yml"
|
||||
- name: Create stack with compose file
|
||||
register: output
|
||||
docker_stack:
|
||||
state: present
|
||||
name: test_stack
|
||||
compose:
|
||||
- "{{ remote_tmp_dir }}/stack_compose_base.yml"
|
||||
|
||||
- name: Assert test_stack changed on stack creation with compose file
|
||||
assert:
|
||||
that:
|
||||
- output is changed
|
||||
- name: Assert test_stack changed on stack creation with compose file
|
||||
assert:
|
||||
that:
|
||||
- output is changed
|
||||
|
||||
- name: Get docker_stack_info when docker is running
|
||||
docker_stack_info:
|
||||
register: output
|
||||
- name: Get docker_stack_info when docker is running
|
||||
docker_stack_info:
|
||||
register: output
|
||||
|
||||
- name: assert stack facts
|
||||
assert:
|
||||
that:
|
||||
- 'output.results | type_debug == "list"'
|
||||
- 'output.results[0].Name == "test_stack"'
|
||||
- 'output.results[0].Services == "1"'
|
||||
- name: assert stack facts
|
||||
assert:
|
||||
that:
|
||||
- 'output.results | type_debug == "list"'
|
||||
- 'output.results[0].Name == "test_stack"'
|
||||
- 'output.results[0].Services == "1"'
|
||||
|
||||
always:
|
||||
- name: Cleanup
|
||||
docker_swarm:
|
||||
state: absent
|
||||
force: true
|
||||
- name: Cleanup
|
||||
docker_swarm:
|
||||
state: absent
|
||||
force: true
|
||||
|
||||
@ -5,6 +5,6 @@
|
||||
|
||||
version: '3'
|
||||
services:
|
||||
busybox:
|
||||
image: "{{ docker_test_image_busybox }}"
|
||||
command: sleep 3600
|
||||
busybox:
|
||||
image: "{{ docker_test_image_busybox }}"
|
||||
command: sleep 3600
|
||||
|
||||
@ -5,6 +5,6 @@
|
||||
|
||||
version: '3'
|
||||
services:
|
||||
busybox:
|
||||
environment:
|
||||
envvar: value
|
||||
busybox:
|
||||
environment:
|
||||
envvar: value
|
||||
|
||||
@ -4,17 +4,17 @@
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
stack_compose_base:
|
||||
version: '3'
|
||||
services:
|
||||
busybox:
|
||||
image: "{{ docker_test_image_busybox }}"
|
||||
command: sleep 3600
|
||||
version: '3'
|
||||
services:
|
||||
busybox:
|
||||
image: "{{ docker_test_image_busybox }}"
|
||||
command: sleep 3600
|
||||
|
||||
stack_compose_overrides:
|
||||
version: '3'
|
||||
services:
|
||||
busybox:
|
||||
environment:
|
||||
envvar: value
|
||||
version: '3'
|
||||
services:
|
||||
busybox:
|
||||
environment:
|
||||
envvar: value
|
||||
|
||||
stack_update_expected_diff: '{"test_stack_busybox": {"TaskTemplate": {"ContainerSpec": {"Env": ["envvar=value"]}}}}'
|
||||
|
||||
@ -4,82 +4,82 @@
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
- block:
|
||||
- name: Make sure we're not already using Docker swarm
|
||||
docker_swarm:
|
||||
state: absent
|
||||
force: true
|
||||
- name: Make sure we're not already using Docker swarm
|
||||
docker_swarm:
|
||||
state: absent
|
||||
force: true
|
||||
|
||||
- name: Get docker_stack_info when docker is not running in swarm mode
|
||||
docker_stack_info:
|
||||
ignore_errors: true
|
||||
register: output
|
||||
- name: Get docker_stack_info when docker is not running in swarm mode
|
||||
docker_stack_info:
|
||||
ignore_errors: true
|
||||
register: output
|
||||
|
||||
- name: Assert failure when called when swarm is not running
|
||||
assert:
|
||||
that:
|
||||
- 'output is failed'
|
||||
- '"Error response from daemon: This node is not a swarm manager" in output.msg'
|
||||
- name: Assert failure when called when swarm is not running
|
||||
assert:
|
||||
that:
|
||||
- 'output is failed'
|
||||
- '"Error response from daemon: This node is not a swarm manager" in output.msg'
|
||||
|
||||
- name: Create a swarm cluster
|
||||
docker_swarm:
|
||||
state: present
|
||||
advertise_addr: "{{ ansible_default_ipv4.address | default('127.0.0.1') }}"
|
||||
- name: Create a swarm cluster
|
||||
docker_swarm:
|
||||
state: present
|
||||
advertise_addr: "{{ ansible_default_ipv4.address | default('127.0.0.1') }}"
|
||||
|
||||
- name: Get docker_stack_info when docker is running and not stack available
|
||||
docker_stack_info:
|
||||
register: output
|
||||
- name: Get docker_stack_info when docker is running and not stack available
|
||||
docker_stack_info:
|
||||
register: output
|
||||
|
||||
- name: Assert stack facts
|
||||
assert:
|
||||
that:
|
||||
- 'output.results | type_debug == "list"'
|
||||
- 'output.results | length == 0'
|
||||
- name: Assert stack facts
|
||||
assert:
|
||||
that:
|
||||
- 'output.results | type_debug == "list"'
|
||||
- 'output.results | length == 0'
|
||||
|
||||
- name: Template compose files
|
||||
template:
|
||||
src: "{{ item }}"
|
||||
dest: "{{ remote_tmp_dir }}/"
|
||||
with_items:
|
||||
- stack_compose_base.yml
|
||||
- stack_compose_overrides.yml
|
||||
- name: Template compose files
|
||||
template:
|
||||
src: "{{ item }}"
|
||||
dest: "{{ remote_tmp_dir }}/"
|
||||
with_items:
|
||||
- stack_compose_base.yml
|
||||
- stack_compose_overrides.yml
|
||||
|
||||
- name: Install docker_stack python requirements
|
||||
pip:
|
||||
name: jsondiff,pyyaml
|
||||
- name: Install docker_stack python requirements
|
||||
pip:
|
||||
name: jsondiff,pyyaml
|
||||
|
||||
- name: Create stack with compose file
|
||||
register: output
|
||||
docker_stack:
|
||||
state: present
|
||||
name: test_stack
|
||||
compose:
|
||||
- "{{ remote_tmp_dir }}/stack_compose_base.yml"
|
||||
- name: Create stack with compose file
|
||||
register: output
|
||||
docker_stack:
|
||||
state: present
|
||||
name: test_stack
|
||||
compose:
|
||||
- "{{ remote_tmp_dir }}/stack_compose_base.yml"
|
||||
|
||||
- name: Assert test_stack changed on stack creation with compose file
|
||||
assert:
|
||||
that:
|
||||
- output is changed
|
||||
- name: Assert test_stack changed on stack creation with compose file
|
||||
assert:
|
||||
that:
|
||||
- output is changed
|
||||
|
||||
- name: Wait a bit to make sure stack is running
|
||||
pause:
|
||||
seconds: 5
|
||||
- name: Wait a bit to make sure stack is running
|
||||
pause:
|
||||
seconds: 5
|
||||
|
||||
- name: Get docker_stack_info when docker is running
|
||||
docker_stack_info:
|
||||
register: output
|
||||
- name: Get docker_stack_info when docker is running
|
||||
docker_stack_info:
|
||||
register: output
|
||||
|
||||
- name: Get docker_stack_task_info first element
|
||||
docker_stack_task_info:
|
||||
name: "{{ output.results[0].Name }}"
|
||||
register: output
|
||||
- name: Get docker_stack_task_info first element
|
||||
docker_stack_task_info:
|
||||
name: "{{ output.results[0].Name }}"
|
||||
register: output
|
||||
|
||||
- name: assert stack facts
|
||||
assert:
|
||||
that:
|
||||
- 'output.results | type_debug == "list"'
|
||||
- 'output.results[0].DesiredState == "Running"'
|
||||
- 'output.results[0].Image == docker_test_image_busybox'
|
||||
- 'output.results[0].Name == "test_stack_busybox.1"'
|
||||
- name: assert stack facts
|
||||
assert:
|
||||
that:
|
||||
- 'output.results | type_debug == "list"'
|
||||
- 'output.results[0].DesiredState == "Running"'
|
||||
- 'output.results[0].Image == docker_test_image_busybox'
|
||||
- 'output.results[0].Name == "test_stack_busybox.1"'
|
||||
|
||||
always:
|
||||
- name: Cleanup
|
||||
|
||||
@ -5,6 +5,6 @@
|
||||
|
||||
version: '3'
|
||||
services:
|
||||
busybox:
|
||||
image: "{{ docker_test_image_busybox }}"
|
||||
command: sleep 3600
|
||||
busybox:
|
||||
image: "{{ docker_test_image_busybox }}"
|
||||
command: sleep 3600
|
||||
|
||||
@ -5,6 +5,6 @@
|
||||
|
||||
version: '3'
|
||||
services:
|
||||
busybox:
|
||||
environment:
|
||||
envvar: value
|
||||
busybox:
|
||||
environment:
|
||||
envvar: value
|
||||
|
||||
@ -4,17 +4,17 @@
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
stack_compose_base:
|
||||
version: '3'
|
||||
services:
|
||||
busybox:
|
||||
image: "{{ docker_test_image_busybox }}"
|
||||
command: sleep 3600
|
||||
version: '3'
|
||||
services:
|
||||
busybox:
|
||||
image: "{{ docker_test_image_busybox }}"
|
||||
command: sleep 3600
|
||||
|
||||
stack_compose_overrides:
|
||||
version: '3'
|
||||
services:
|
||||
busybox:
|
||||
environment:
|
||||
envvar: value
|
||||
version: '3'
|
||||
services:
|
||||
busybox:
|
||||
environment:
|
||||
envvar: value
|
||||
|
||||
stack_update_expected_diff: '{"test_stack_busybox": {"TaskTemplate": {"ContainerSpec": {"Env": ["envvar=value"]}}}}'
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user