mirror of
https://github.com/ansible-collections/community.docker.git
synced 2026-04-12 12:35:53 +00:00
Fix linting errors.
This commit is contained in:
parent
795e6b23dc
commit
2487d1a0bf
@ -1,3 +1,4 @@
|
|||||||
|
---
|
||||||
# Copyright (c) Ansible Project
|
# Copyright (c) Ansible Project
|
||||||
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
|
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
@ -49,11 +50,11 @@ jobs:
|
|||||||
parameters:
|
parameters:
|
||||||
jobs:
|
jobs:
|
||||||
- ${{ if eq(length(parameters.groups), 0) }}:
|
- ${{ if eq(length(parameters.groups), 0) }}:
|
||||||
- ${{ each target in parameters.targets }}:
|
|
||||||
- name: ${{ format(parameters.nameFormat, coalesce(target.name, target.test)) }}
|
|
||||||
test: ${{ format(parameters.testFormat, coalesce(target.test, target.name)) }}
|
|
||||||
- ${{ if not(eq(length(parameters.groups), 0)) }}:
|
|
||||||
- ${{ each group in parameters.groups }}:
|
|
||||||
- ${{ each target in parameters.targets }}:
|
- ${{ each target in parameters.targets }}:
|
||||||
- name: ${{ format(format(parameters.nameGroupFormat, parameters.nameFormat), coalesce(target.name, target.test), group) }}
|
- name: ${{ format(parameters.nameFormat, coalesce(target.name, target.test)) }}
|
||||||
test: ${{ format(format(parameters.testGroupFormat, parameters.testFormat), coalesce(target.test, target.name), group) }}
|
test: ${{ format(parameters.testFormat, coalesce(target.test, target.name)) }}
|
||||||
|
- ${{ if not(eq(length(parameters.groups), 0)) }}:
|
||||||
|
- ${{ each group in parameters.groups }}:
|
||||||
|
- ${{ each target in parameters.targets }}:
|
||||||
|
- name: ${{ format(format(parameters.nameGroupFormat, parameters.nameFormat), coalesce(target.name, target.test), group) }}
|
||||||
|
test: ${{ format(format(parameters.testGroupFormat, parameters.testFormat), coalesce(target.test, target.name), group) }}
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
---
|
||||||
# Copyright (c) Ansible Project
|
# Copyright (c) Ansible Project
|
||||||
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
|
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
@ -13,37 +14,37 @@ parameters:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
- ${{ each job in parameters.jobs }}:
|
- ${{ each job in parameters.jobs }}:
|
||||||
- job: test_${{ replace(replace(replace(job.test, '/', '_'), '.', '_'), '-', '_') }}
|
- job: test_${{ replace(replace(replace(job.test, '/', '_'), '.', '_'), '-', '_') }}
|
||||||
displayName: ${{ job.name }}
|
displayName: ${{ job.name }}
|
||||||
container: default
|
container: default
|
||||||
workspace:
|
workspace:
|
||||||
clean: all
|
clean: all
|
||||||
steps:
|
steps:
|
||||||
- checkout: self
|
- checkout: self
|
||||||
fetchDepth: $(fetchDepth)
|
fetchDepth: $(fetchDepth)
|
||||||
path: $(checkoutPath)
|
path: $(checkoutPath)
|
||||||
- bash: .azure-pipelines/scripts/run-tests.sh "$(entryPoint)" "${{ job.test }}" "$(coverageBranches)"
|
- bash: .azure-pipelines/scripts/run-tests.sh "$(entryPoint)" "${{ job.test }}" "$(coverageBranches)"
|
||||||
displayName: Run Tests
|
displayName: Run Tests
|
||||||
- bash: .azure-pipelines/scripts/process-results.sh
|
- bash: .azure-pipelines/scripts/process-results.sh
|
||||||
condition: succeededOrFailed()
|
condition: succeededOrFailed()
|
||||||
displayName: Process Results
|
displayName: Process Results
|
||||||
- bash: .azure-pipelines/scripts/aggregate-coverage.sh "$(Agent.TempDirectory)"
|
- bash: .azure-pipelines/scripts/aggregate-coverage.sh "$(Agent.TempDirectory)"
|
||||||
condition: eq(variables.haveCoverageData, 'true')
|
condition: eq(variables.haveCoverageData, 'true')
|
||||||
displayName: Aggregate Coverage Data
|
displayName: Aggregate Coverage Data
|
||||||
- task: PublishTestResults@2
|
- task: PublishTestResults@2
|
||||||
condition: eq(variables.haveTestResults, 'true')
|
condition: eq(variables.haveTestResults, 'true')
|
||||||
inputs:
|
inputs:
|
||||||
testResultsFiles: "$(outputPath)/junit/*.xml"
|
testResultsFiles: "$(outputPath)/junit/*.xml"
|
||||||
displayName: Publish Test Results
|
displayName: Publish Test Results
|
||||||
- task: PublishPipelineArtifact@1
|
- task: PublishPipelineArtifact@1
|
||||||
condition: eq(variables.haveBotResults, 'true')
|
condition: eq(variables.haveBotResults, 'true')
|
||||||
displayName: Publish Bot Results
|
displayName: Publish Bot Results
|
||||||
inputs:
|
inputs:
|
||||||
targetPath: "$(outputPath)/bot/"
|
targetPath: "$(outputPath)/bot/"
|
||||||
artifactName: "Bot $(System.JobAttempt) $(System.StageDisplayName) $(System.JobDisplayName)"
|
artifactName: "Bot $(System.JobAttempt) $(System.StageDisplayName) $(System.JobDisplayName)"
|
||||||
- task: PublishPipelineArtifact@1
|
- task: PublishPipelineArtifact@1
|
||||||
condition: eq(variables.haveCoverageData, 'true')
|
condition: eq(variables.haveCoverageData, 'true')
|
||||||
displayName: Publish Coverage Data
|
displayName: Publish Coverage Data
|
||||||
inputs:
|
inputs:
|
||||||
targetPath: "$(Agent.TempDirectory)/coverage/"
|
targetPath: "$(Agent.TempDirectory)/coverage/"
|
||||||
artifactName: "Coverage $(System.JobAttempt) $(System.StageDisplayName) $(System.JobDisplayName)"
|
artifactName: "Coverage $(System.JobAttempt) $(System.StageDisplayName) $(System.JobDisplayName)"
|
||||||
|
|||||||
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
|
# https://github.com/marketplace/actions/ansible-test
|
||||||
|
|
||||||
name: EOL CI
|
name: EOL CI
|
||||||
on:
|
'on':
|
||||||
# Run EOL CI against all pushes (direct commits, also merged PRs), Pull Requests
|
# Run EOL CI against all pushes (direct commits, also merged PRs), Pull Requests
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
|
|||||||
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
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
name: Helper Docker images for testing
|
name: Helper Docker images for testing
|
||||||
on:
|
'on':
|
||||||
# Run CI against all pushes (direct commits, also merged PRs), Pull Requests
|
# Run CI against all pushes (direct commits, also merged PRs), Pull Requests
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
|
|||||||
2
.github/workflows/docs-pr.yml
vendored
2
.github/workflows/docs-pr.yml
vendored
@ -7,7 +7,7 @@ name: Collection Docs
|
|||||||
concurrency:
|
concurrency:
|
||||||
group: docs-pr-${{ github.head_ref }}
|
group: docs-pr-${{ github.head_ref }}
|
||||||
cancel-in-progress: true
|
cancel-in-progress: true
|
||||||
on:
|
'on':
|
||||||
pull_request_target:
|
pull_request_target:
|
||||||
types: [opened, synchronize, reopened, closed]
|
types: [opened, synchronize, reopened, closed]
|
||||||
|
|
||||||
|
|||||||
2
.github/workflows/docs-push.yml
vendored
2
.github/workflows/docs-push.yml
vendored
@ -7,7 +7,7 @@ name: Collection Docs
|
|||||||
concurrency:
|
concurrency:
|
||||||
group: docs-push-${{ github.sha }}
|
group: docs-push-${{ github.sha }}
|
||||||
cancel-in-progress: true
|
cancel-in-progress: true
|
||||||
on:
|
'on':
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- main
|
- main
|
||||||
|
|||||||
2
.github/workflows/ee.yml
vendored
2
.github/workflows/ee.yml
vendored
@ -4,7 +4,7 @@
|
|||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
name: execution environment
|
name: execution environment
|
||||||
on:
|
'on':
|
||||||
# Run CI against all pushes (direct commits, also merged PRs), Pull Requests
|
# Run CI against all pushes (direct commits, also merged PRs), Pull Requests
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
|
|||||||
@ -15,7 +15,7 @@ description: Modules and plugins for working with Docker
|
|||||||
license:
|
license:
|
||||||
- GPL-3.0-or-later
|
- GPL-3.0-or-later
|
||||||
- Apache-2.0
|
- Apache-2.0
|
||||||
#license_file: COPYING
|
# license_file: COPYING
|
||||||
tags:
|
tags:
|
||||||
- docker
|
- docker
|
||||||
dependencies:
|
dependencies:
|
||||||
|
|||||||
@ -27,6 +27,7 @@ extends_documentation_fragment:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
EXAMPLES = r"""
|
EXAMPLES = r"""
|
||||||
|
---
|
||||||
- name: Get facts on current container
|
- name: Get facts on current container
|
||||||
community.docker.current_container_facts:
|
community.docker.current_container_facts:
|
||||||
|
|
||||||
|
|||||||
@ -178,6 +178,7 @@ seealso:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
EXAMPLES = r"""
|
EXAMPLES = r"""
|
||||||
|
---
|
||||||
# Examples use the django example at https://docs.docker.com/compose/django. Follow it to create the
|
# Examples use the django example at https://docs.docker.com/compose/django. Follow it to create the
|
||||||
# flask directory
|
# flask directory
|
||||||
|
|
||||||
|
|||||||
@ -119,6 +119,7 @@ notes:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
EXAMPLES = r"""
|
EXAMPLES = r"""
|
||||||
|
---
|
||||||
- name: Run a simple command (command)
|
- name: Run a simple command (command)
|
||||||
community.docker.docker_compose_v2_exec:
|
community.docker.docker_compose_v2_exec:
|
||||||
service: foo
|
service: foo
|
||||||
|
|||||||
@ -75,6 +75,7 @@ seealso:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
EXAMPLES = r"""
|
EXAMPLES = r"""
|
||||||
|
---
|
||||||
- name: Pull images for flask project
|
- name: Pull images for flask project
|
||||||
community.docker.docker_compose_v2_pull:
|
community.docker.docker_compose_v2_pull:
|
||||||
project_src: /path/to/flask
|
project_src: /path/to/flask
|
||||||
|
|||||||
@ -187,6 +187,7 @@ notes:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
EXAMPLES = r"""
|
EXAMPLES = r"""
|
||||||
|
---
|
||||||
- name: Run a simple command (command)
|
- name: Run a simple command (command)
|
||||||
community.docker.docker_compose_v2_run:
|
community.docker.docker_compose_v2_run:
|
||||||
service: foo
|
service: foo
|
||||||
|
|||||||
@ -111,6 +111,7 @@ author:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
EXAMPLES = r"""
|
EXAMPLES = r"""
|
||||||
|
---
|
||||||
- name: Create config foo (from a file on the control machine)
|
- name: Create config foo (from a file on the control machine)
|
||||||
community.docker.docker_config:
|
community.docker.docker_config:
|
||||||
name: foo
|
name: foo
|
||||||
|
|||||||
@ -996,6 +996,7 @@ requirements:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
EXAMPLES = r"""
|
EXAMPLES = r"""
|
||||||
|
---
|
||||||
- name: Create a data container
|
- name: Create a data container
|
||||||
community.docker.docker_container:
|
community.docker.docker_container:
|
||||||
name: mydata
|
name: mydata
|
||||||
|
|||||||
@ -120,6 +120,7 @@ requirements:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
EXAMPLES = r"""
|
EXAMPLES = r"""
|
||||||
|
---
|
||||||
- name: Copy a file into the container
|
- name: Copy a file into the container
|
||||||
community.docker.docker_container_copy_into:
|
community.docker.docker_container_copy_into:
|
||||||
container: mydata
|
container: mydata
|
||||||
|
|||||||
@ -111,6 +111,7 @@ requirements:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
EXAMPLES = r"""
|
EXAMPLES = r"""
|
||||||
|
---
|
||||||
- name: Run a simple command (command)
|
- name: Run a simple command (command)
|
||||||
community.docker.docker_container_exec:
|
community.docker.docker_container_exec:
|
||||||
container: foo
|
container: foo
|
||||||
|
|||||||
@ -40,6 +40,7 @@ requirements:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
EXAMPLES = r"""
|
EXAMPLES = r"""
|
||||||
|
---
|
||||||
- name: Get infos on container
|
- name: Get infos on container
|
||||||
community.docker.docker_container_info:
|
community.docker.docker_container_info:
|
||||||
name: mydata
|
name: mydata
|
||||||
|
|||||||
@ -51,6 +51,7 @@ author:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
EXAMPLES = r"""
|
EXAMPLES = r"""
|
||||||
|
---
|
||||||
- name: Get infos on contexts
|
- name: Get infos on contexts
|
||||||
community.docker.docker_context_info:
|
community.docker.docker_context_info:
|
||||||
register: result
|
register: result
|
||||||
|
|||||||
@ -122,6 +122,7 @@ requirements:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
EXAMPLES = r"""
|
EXAMPLES = r"""
|
||||||
|
---
|
||||||
- name: Get info on docker host
|
- name: Get info on docker host
|
||||||
community.docker.docker_host_info:
|
community.docker.docker_host_info:
|
||||||
register: result
|
register: result
|
||||||
|
|||||||
@ -263,6 +263,7 @@ seealso:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
EXAMPLES = r"""
|
EXAMPLES = r"""
|
||||||
|
---
|
||||||
- name: Pull an image
|
- name: Pull an image
|
||||||
community.docker.docker_image:
|
community.docker.docker_image:
|
||||||
name: pacur/centos-7
|
name: pacur/centos-7
|
||||||
|
|||||||
@ -248,6 +248,7 @@ seealso:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
EXAMPLES = r"""
|
EXAMPLES = r"""
|
||||||
|
---
|
||||||
- name: Build Python 3.12 image
|
- name: Build Python 3.12 image
|
||||||
community.docker.docker_image_build:
|
community.docker.docker_image_build:
|
||||||
name: localhost/python/3.12:latest
|
name: localhost/python/3.12:latest
|
||||||
|
|||||||
@ -71,6 +71,7 @@ seealso:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
EXAMPLES = r"""
|
EXAMPLES = r"""
|
||||||
|
---
|
||||||
- name: Export an image
|
- name: Export an image
|
||||||
community.docker.docker_image_export:
|
community.docker.docker_image_export:
|
||||||
name: pacur/centos-7
|
name: pacur/centos-7
|
||||||
|
|||||||
@ -46,6 +46,7 @@ author:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
EXAMPLES = r"""
|
EXAMPLES = r"""
|
||||||
|
---
|
||||||
- name: Inspect a single image
|
- name: Inspect a single image
|
||||||
community.docker.docker_image_info:
|
community.docker.docker_image_info:
|
||||||
name: pacur/centos-7
|
name: pacur/centos-7
|
||||||
@ -71,20 +72,68 @@ images:
|
|||||||
returned: always
|
returned: always
|
||||||
type: list
|
type: list
|
||||||
elements: dict
|
elements: dict
|
||||||
sample: [{"Architecture": "amd64", "Author": "", "Comment": "", "Config": {"AttachStderr": false, "AttachStdin": false,
|
sample: [
|
||||||
"AttachStdout": false, "Cmd": ["/etc/docker/registry/config.yml"], "Domainname": "", "Entrypoint": ["/bin/registry"],
|
{
|
||||||
"Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"], "ExposedPorts": {"5000/tcp": {}},
|
"Architecture": "amd64",
|
||||||
"Hostname": "e5c68db50333", "Image": "c72dce2618dc8f7b794d2b2c2b1e64e0205ead5befc294f8111da23bd6a2c799", "Labels": {},
|
"Author": "",
|
||||||
"OnBuild": [], "OpenStdin": false, "StdinOnce": false, "Tty": false, "User": "", "Volumes": {"/var/lib/registry": {}},
|
"Comment": "",
|
||||||
"WorkingDir": ""}, "Container": "e83a452b8fb89d78a25a6739457050131ca5c863629a47639530d9ad2008d610", "ContainerConfig": {
|
"Config": {
|
||||||
"AttachStderr": false, "AttachStdin": false, "AttachStdout": false, "Cmd": ["/bin/sh", "-c", '#(nop) CMD ["/etc/docker/registry/config.yml"]'],
|
"AttachStderr": false,
|
||||||
"Domainname": "", "Entrypoint": ["/bin/registry"], "Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],
|
"AttachStdin": false,
|
||||||
"ExposedPorts": {"5000/tcp": {}}, "Hostname": "e5c68db50333", "Image": "c72dce2618dc8f7b794d2b2c2b1e64e0205ead5befc294f8111da23bd6a2c799",
|
"AttachStdout": false,
|
||||||
"Labels": {}, "OnBuild": [], "OpenStdin": false, "StdinOnce": false, "Tty": false, "User": "", "Volumes": {"/var/lib/registry": {}},
|
"Cmd": ["/etc/docker/registry/config.yml"],
|
||||||
"WorkingDir": ""}, "Created": "2016-03-08T21:08:15.399680378Z", "DockerVersion": "1.9.1", "GraphDriver": {"Data": null,
|
"Domainname": "",
|
||||||
"Name": "aufs"}, "Id": "53773d8552f07b730f3e19979e32499519807d67b344141d965463a950a66e08", "Name": "registry:2",
|
"Entrypoint": ["/bin/registry"],
|
||||||
"Os": "linux", "Parent": "f0b1f729f784b755e7bf9c8c2e65d8a0a35a533769c2588f02895f6781ac0805", "RepoDigests": [], "RepoTags": [
|
"Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],
|
||||||
"registry:2"], "Size": 0, "VirtualSize": 165808884}]
|
"ExposedPorts": {"5000/tcp": {}},
|
||||||
|
"Hostname": "e5c68db50333",
|
||||||
|
"Image": "c72dce2618dc8f7b794d2b2c2b1e64e0205ead5befc294f8111da23bd6a2c799",
|
||||||
|
"Labels": {},
|
||||||
|
"OnBuild": [],
|
||||||
|
"OpenStdin": false,
|
||||||
|
"StdinOnce": false,
|
||||||
|
"Tty": false,
|
||||||
|
"User": "",
|
||||||
|
"Volumes": {"/var/lib/registry": {}},
|
||||||
|
"WorkingDir": "",
|
||||||
|
},
|
||||||
|
"Container": "e83a452b8fb89d78a25a6739457050131ca5c863629a47639530d9ad2008d610",
|
||||||
|
"ContainerConfig": {
|
||||||
|
"AttachStderr": false,
|
||||||
|
"AttachStdin": false,
|
||||||
|
"AttachStdout": false,
|
||||||
|
"Cmd": ["/bin/sh", "-c", '#(nop) CMD ["/etc/docker/registry/config.yml"]'],
|
||||||
|
"Domainname": "",
|
||||||
|
"Entrypoint": ["/bin/registry"],
|
||||||
|
"Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],
|
||||||
|
"ExposedPorts": {"5000/tcp": {}},
|
||||||
|
"Hostname": "e5c68db50333",
|
||||||
|
"Image": "c72dce2618dc8f7b794d2b2c2b1e64e0205ead5befc294f8111da23bd6a2c799",
|
||||||
|
"Labels": {},
|
||||||
|
"OnBuild": [],
|
||||||
|
"OpenStdin": false,
|
||||||
|
"StdinOnce": false,
|
||||||
|
"Tty": false,
|
||||||
|
"User": "",
|
||||||
|
"Volumes": {"/var/lib/registry": {}},
|
||||||
|
"WorkingDir": "",
|
||||||
|
},
|
||||||
|
"Created": "2016-03-08T21:08:15.399680378Z",
|
||||||
|
"DockerVersion": "1.9.1",
|
||||||
|
"GraphDriver": {
|
||||||
|
"Data": null,
|
||||||
|
"Name": "aufs",
|
||||||
|
},
|
||||||
|
"Id": "53773d8552f07b730f3e19979e32499519807d67b344141d965463a950a66e08",
|
||||||
|
"Name": "registry:2",
|
||||||
|
"Os": "linux",
|
||||||
|
"Parent": "f0b1f729f784b755e7bf9c8c2e65d8a0a35a533769c2588f02895f6781ac0805",
|
||||||
|
"RepoDigests": [],
|
||||||
|
"RepoTags": ["registry:2"],
|
||||||
|
"Size": 0,
|
||||||
|
"VirtualSize": 165808884,
|
||||||
|
},
|
||||||
|
]
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import traceback
|
import traceback
|
||||||
|
|||||||
@ -52,6 +52,7 @@ seealso:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
EXAMPLES = r"""
|
EXAMPLES = r"""
|
||||||
|
---
|
||||||
- name: Load all image(s) from the given tar file
|
- name: Load all image(s) from the given tar file
|
||||||
community.docker.docker_image_load:
|
community.docker.docker_image_load:
|
||||||
path: /path/to/images.tar
|
path: /path/to/images.tar
|
||||||
|
|||||||
@ -75,6 +75,7 @@ seealso:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
EXAMPLES = r"""
|
EXAMPLES = r"""
|
||||||
|
---
|
||||||
- name: Pull an image
|
- name: Pull an image
|
||||||
community.docker.docker_image_pull:
|
community.docker.docker_image_pull:
|
||||||
name: pacur/centos-7
|
name: pacur/centos-7
|
||||||
|
|||||||
@ -57,6 +57,7 @@ seealso:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
EXAMPLES = r"""
|
EXAMPLES = r"""
|
||||||
|
---
|
||||||
- name: Push an image
|
- name: Push an image
|
||||||
community.docker.docker_image_push:
|
community.docker.docker_image_push:
|
||||||
name: registry.example.com:5000/repo/image
|
name: registry.example.com:5000/repo/image
|
||||||
|
|||||||
@ -68,6 +68,7 @@ seealso:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
EXAMPLES = r"""
|
EXAMPLES = r"""
|
||||||
|
---
|
||||||
- name: Remove an image
|
- name: Remove an image
|
||||||
community.docker.docker_image_remove:
|
community.docker.docker_image_remove:
|
||||||
name: pacur/centos-7
|
name: pacur/centos-7
|
||||||
|
|||||||
@ -76,6 +76,7 @@ seealso:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
EXAMPLES = r"""
|
EXAMPLES = r"""
|
||||||
|
---
|
||||||
- name: Tag Python 3.12 image with two new names
|
- name: Tag Python 3.12 image with two new names
|
||||||
community.docker.docker_image_tag:
|
community.docker.docker_image_tag:
|
||||||
name: python:3.12
|
name: python:3.12
|
||||||
|
|||||||
@ -85,6 +85,7 @@ author:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
EXAMPLES = r"""
|
EXAMPLES = r"""
|
||||||
|
---
|
||||||
- name: Log into DockerHub
|
- name: Log into DockerHub
|
||||||
community.docker.docker_login:
|
community.docker.docker_login:
|
||||||
username: docker
|
username: docker
|
||||||
|
|||||||
@ -203,6 +203,7 @@ requirements:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
EXAMPLES = r"""
|
EXAMPLES = r"""
|
||||||
|
---
|
||||||
- name: Create a network
|
- name: Create a network
|
||||||
community.docker.docker_network:
|
community.docker.docker_network:
|
||||||
name: network_one
|
name: network_one
|
||||||
|
|||||||
@ -40,6 +40,7 @@ requirements:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
EXAMPLES = r"""
|
EXAMPLES = r"""
|
||||||
|
---
|
||||||
- name: Get infos on network
|
- name: Get infos on network
|
||||||
community.docker.docker_network_info:
|
community.docker.docker_network_info:
|
||||||
name: mydata
|
name: mydata
|
||||||
@ -68,10 +69,32 @@ network:
|
|||||||
- Will be V(none) if network does not exist.
|
- Will be V(none) if network does not exist.
|
||||||
returned: always
|
returned: always
|
||||||
type: dict
|
type: dict
|
||||||
sample: {"Attachable": false, "ConfigFrom": {"Network": ""}, "ConfigOnly": false, "Containers": {}, "Created": "2018-12-07T01:47:51.250835114-06:00",
|
sample: {
|
||||||
"Driver": "bridge", "EnableIPv6": false, "IPAM": {"Config": [{"Gateway": "192.168.96.1", "Subnet": "192.168.96.0/20"}],
|
"Attachable": false,
|
||||||
"Driver": "default", "Options": null}, "Id": "0856968545f22026c41c2c7c3d448319d3b4a6a03a40b148b3ac4031696d1c0a", "Ingress": false,
|
"ConfigFrom": {"Network": ""},
|
||||||
"Internal": false, "Labels": {}, "Name": "ansible-test-f2700bba", "Options": {}, "Scope": "local"}
|
"ConfigOnly": false,
|
||||||
|
"Containers": {},
|
||||||
|
"Created": "2018-12-07T01:47:51.250835114-06:00",
|
||||||
|
"Driver": "bridge",
|
||||||
|
"EnableIPv6": false,
|
||||||
|
"IPAM": {
|
||||||
|
"Config": [
|
||||||
|
{
|
||||||
|
"Gateway": "192.168.96.1",
|
||||||
|
"Subnet": "192.168.96.0/20",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
"Driver": "default",
|
||||||
|
"Options": null,
|
||||||
|
},
|
||||||
|
"Id": "0856968545f22026c41c2c7c3d448319d3b4a6a03a40b148b3ac4031696d1c0a",
|
||||||
|
"Ingress": false,
|
||||||
|
"Internal": false,
|
||||||
|
"Labels": {},
|
||||||
|
"Name": "ansible-test-f2700bba",
|
||||||
|
"Options": {},
|
||||||
|
"Scope": "local",
|
||||||
|
}
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import traceback
|
import traceback
|
||||||
|
|||||||
@ -90,6 +90,7 @@ author:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
EXAMPLES = r"""
|
EXAMPLES = r"""
|
||||||
|
---
|
||||||
- name: Set node role
|
- name: Set node role
|
||||||
community.docker.docker_node:
|
community.docker.docker_node:
|
||||||
hostname: mynode
|
hostname: mynode
|
||||||
|
|||||||
@ -52,6 +52,7 @@ requirements:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
EXAMPLES = r"""
|
EXAMPLES = r"""
|
||||||
|
---
|
||||||
- name: Get info on all nodes
|
- name: Get info on all nodes
|
||||||
community.docker.docker_node_info:
|
community.docker.docker_node_info:
|
||||||
register: result
|
register: result
|
||||||
|
|||||||
@ -86,6 +86,7 @@ requirements:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
EXAMPLES = r"""
|
EXAMPLES = r"""
|
||||||
|
---
|
||||||
- name: Install a plugin
|
- name: Install a plugin
|
||||||
community.docker.docker_plugin:
|
community.docker.docker_plugin:
|
||||||
plugin_name: plugin_one
|
plugin_name: plugin_one
|
||||||
|
|||||||
@ -114,6 +114,7 @@ requirements:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
EXAMPLES = r"""
|
EXAMPLES = r"""
|
||||||
|
---
|
||||||
- name: Prune containers older than 24h
|
- name: Prune containers older than 24h
|
||||||
community.docker.docker_prune:
|
community.docker.docker_prune:
|
||||||
containers: true
|
containers: true
|
||||||
|
|||||||
@ -103,6 +103,7 @@ author:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
EXAMPLES = r"""
|
EXAMPLES = r"""
|
||||||
|
---
|
||||||
- name: Create secret foo (from a file on the control machine)
|
- name: Create secret foo (from a file on the control machine)
|
||||||
community.docker.docker_secret:
|
community.docker.docker_secret:
|
||||||
name: foo
|
name: foo
|
||||||
|
|||||||
@ -128,6 +128,7 @@ stack_spec_diff:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
EXAMPLES = r"""
|
EXAMPLES = r"""
|
||||||
|
---
|
||||||
- name: Deploy stack from a compose file
|
- name: Deploy stack from a compose file
|
||||||
community.docker.docker_stack:
|
community.docker.docker_stack:
|
||||||
state: present
|
state: present
|
||||||
|
|||||||
@ -66,6 +66,7 @@ results:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
EXAMPLES = r"""
|
EXAMPLES = r"""
|
||||||
|
---
|
||||||
- name: Shows stack info
|
- name: Shows stack info
|
||||||
community.docker.docker_stack_info:
|
community.docker.docker_stack_info:
|
||||||
register: result
|
register: result
|
||||||
|
|||||||
@ -59,14 +59,21 @@ results:
|
|||||||
description:
|
description:
|
||||||
- List of dictionaries containing the list of tasks associated to a stack name.
|
- List of dictionaries containing the list of tasks associated to a stack name.
|
||||||
sample:
|
sample:
|
||||||
- {"CurrentState": "Running", "DesiredState": "Running", "Error": "", "ID": "7wqv6m02ugkw", "Image": "busybox", "Name": "test_stack.1",
|
- CurrentState: Running
|
||||||
"Node": "swarm", "Ports": ""}
|
DesiredState: Running
|
||||||
|
Error: ""
|
||||||
|
ID: 7wqv6m02ugkw
|
||||||
|
Image: busybox
|
||||||
|
Name: test_stack.1
|
||||||
|
Node: swarm
|
||||||
|
Ports: ""
|
||||||
returned: always
|
returned: always
|
||||||
type: list
|
type: list
|
||||||
elements: dict
|
elements: dict
|
||||||
"""
|
"""
|
||||||
|
|
||||||
EXAMPLES = r"""
|
EXAMPLES = r"""
|
||||||
|
---
|
||||||
- name: Shows stack info
|
- name: Shows stack info
|
||||||
community.docker.docker_stack_task_info:
|
community.docker.docker_stack_task_info:
|
||||||
name: test_stack
|
name: test_stack
|
||||||
|
|||||||
@ -206,6 +206,7 @@ author:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
EXAMPLES = r"""
|
EXAMPLES = r"""
|
||||||
|
---
|
||||||
- name: Init a new swarm with default parameters
|
- name: Init a new swarm with default parameters
|
||||||
community.docker.docker_swarm:
|
community.docker.docker_swarm:
|
||||||
state: present
|
state: present
|
||||||
|
|||||||
@ -89,6 +89,7 @@ requirements:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
EXAMPLES = r"""
|
EXAMPLES = r"""
|
||||||
|
---
|
||||||
- name: Get info on Docker Swarm
|
- name: Get info on Docker Swarm
|
||||||
community.docker.docker_swarm_info:
|
community.docker.docker_swarm_info:
|
||||||
ignore_errors: true
|
ignore_errors: true
|
||||||
|
|||||||
@ -694,6 +694,7 @@ rebuilt:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
EXAMPLES = r"""
|
EXAMPLES = r"""
|
||||||
|
---
|
||||||
- name: Set command and arguments
|
- name: Set command and arguments
|
||||||
community.docker.docker_swarm_service:
|
community.docker.docker_swarm_service:
|
||||||
name: myservice
|
name: myservice
|
||||||
|
|||||||
@ -41,6 +41,7 @@ requirements:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
EXAMPLES = r"""
|
EXAMPLES = r"""
|
||||||
|
---
|
||||||
- name: Get info from a service
|
- name: Get info from a service
|
||||||
community.docker.docker_swarm_service_info:
|
community.docker.docker_swarm_service_info:
|
||||||
name: myservice
|
name: myservice
|
||||||
|
|||||||
@ -91,6 +91,7 @@ requirements:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
EXAMPLES = r"""
|
EXAMPLES = r"""
|
||||||
|
---
|
||||||
- name: Create a volume
|
- name: Create a volume
|
||||||
community.docker.docker_volume:
|
community.docker.docker_volume:
|
||||||
name: volume_one
|
name: volume_one
|
||||||
|
|||||||
@ -38,6 +38,7 @@ requirements:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
EXAMPLES = r"""
|
EXAMPLES = r"""
|
||||||
|
---
|
||||||
- name: Get infos on volume
|
- name: Get infos on volume
|
||||||
community.docker.docker_volume_info:
|
community.docker.docker_volume_info:
|
||||||
name: mydata
|
name: mydata
|
||||||
|
|||||||
@ -4,8 +4,8 @@
|
|||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
collections:
|
collections:
|
||||||
- ansible.posix
|
- ansible.posix
|
||||||
- community.crypto
|
- community.crypto
|
||||||
- community.general
|
- community.general
|
||||||
- community.internal_test_tools
|
- community.internal_test_tools
|
||||||
- community.library_inventory_filtering_v1
|
- community.library_inventory_filtering_v1
|
||||||
|
|||||||
@ -8,41 +8,41 @@
|
|||||||
serial: 1
|
serial: 1
|
||||||
tasks:
|
tasks:
|
||||||
|
|
||||||
### raw with unicode arg and output
|
### raw with unicode arg and output
|
||||||
|
|
||||||
- name: raw with unicode arg and output
|
- name: raw with unicode arg and output
|
||||||
raw: echo 汉语
|
raw: echo 汉语
|
||||||
register: command
|
register: command
|
||||||
- name: check output of raw with unicode arg and output
|
- name: check output of raw with unicode arg and output
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- "'汉语' in command.stdout"
|
- "'汉语' in command.stdout"
|
||||||
- command is changed # as of 2.2, raw should default to changed: true for consistency w/ shell/command/script modules
|
- command is changed # as of 2.2, raw should default to changed: true for consistency w/ shell/command/script modules
|
||||||
|
|
||||||
### copy local file with unicode filename and content
|
### copy local file with unicode filename and content
|
||||||
|
|
||||||
- name: create local file with unicode filename and content
|
- name: create local file with unicode filename and content
|
||||||
local_action: lineinfile dest={{ local_tmp }}-汉语/汉语.txt create=true line=汉语
|
local_action: lineinfile dest={{ local_tmp }}-汉语/汉语.txt create=true line=汉语
|
||||||
- name: remove remote file with unicode filename and content
|
- name: remove remote file with unicode filename and content
|
||||||
action: "{{ action_prefix }}file path={{ remote_tmp }}-汉语/汉语.txt state=absent"
|
action: "{{ action_prefix }}file path={{ remote_tmp }}-汉语/汉语.txt state=absent"
|
||||||
- name: create remote directory with unicode name
|
- name: create remote directory with unicode name
|
||||||
action: "{{ action_prefix }}file path={{ remote_tmp }}-汉语 state=directory"
|
action: "{{ action_prefix }}file path={{ remote_tmp }}-汉语 state=directory"
|
||||||
- name: copy local file with unicode filename and content
|
- name: copy local file with unicode filename and content
|
||||||
action: "{{ action_prefix }}copy src={{ local_tmp }}-汉语/汉语.txt dest={{ remote_tmp }}-汉语/汉语.txt"
|
action: "{{ action_prefix }}copy src={{ local_tmp }}-汉语/汉语.txt dest={{ remote_tmp }}-汉语/汉语.txt"
|
||||||
|
|
||||||
### fetch remote file with unicode filename and content
|
### fetch remote file with unicode filename and content
|
||||||
|
|
||||||
- name: remove local file with unicode filename and content
|
- name: remove local file with unicode filename and content
|
||||||
local_action: file path={{ local_tmp }}-汉语/汉语.txt state=absent
|
local_action: file path={{ local_tmp }}-汉语/汉语.txt state=absent
|
||||||
- name: fetch remote file with unicode filename and content
|
- name: fetch remote file with unicode filename and content
|
||||||
fetch: src={{ remote_tmp }}-汉语/汉语.txt dest={{ local_tmp }}-汉语/汉语.txt fail_on_missing=true validate_checksum=true flat=true
|
fetch: src={{ remote_tmp }}-汉语/汉语.txt dest={{ local_tmp }}-汉语/汉语.txt fail_on_missing=true validate_checksum=true flat=true
|
||||||
|
|
||||||
### remove local and remote temp files
|
### remove local and remote temp files
|
||||||
|
|
||||||
- name: remove local temp file
|
- name: remove local temp file
|
||||||
local_action: file path={{ local_tmp }}-汉语 state=absent
|
local_action: file path={{ local_tmp }}-汉语 state=absent
|
||||||
- name: remove remote temp file
|
- name: remove remote temp file
|
||||||
action: "{{ action_prefix }}file path={{ remote_tmp }}-汉语 state=absent"
|
action: "{{ action_prefix }}file path={{ remote_tmp }}-汉语 state=absent"
|
||||||
|
|
||||||
### test wait_for_connection plugin
|
### test wait_for_connection plugin
|
||||||
- ansible.builtin.wait_for_connection:
|
- ansible.builtin.wait_for_connection:
|
||||||
|
|||||||
@ -4,313 +4,131 @@
|
|||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
- block:
|
- block:
|
||||||
- shell: "docker info --format '{% raw %}{{json .}}{% endraw %}' | python -m json.tool"
|
- shell: "docker info --format '{% raw %}{{json .}}{% endraw %}' | python -m json.tool"
|
||||||
|
|
||||||
- name: Make sure we're not already using Docker swarm
|
- name: Make sure we're not already using Docker swarm
|
||||||
docker_swarm:
|
docker_swarm:
|
||||||
state: absent
|
state: absent
|
||||||
force: true
|
force: true
|
||||||
|
|
||||||
- shell: "docker info --format '{% raw %}{{json .}}{% endraw %}' | python -m json.tool"
|
- shell: "docker info --format '{% raw %}{{json .}}{% endraw %}' | python -m json.tool"
|
||||||
|
|
||||||
- name: Create a Swarm cluster
|
- name: Create a Swarm cluster
|
||||||
docker_swarm:
|
docker_swarm:
|
||||||
name: default
|
name: default
|
||||||
state: present
|
|
||||||
advertise_addr: "{{ ansible_default_ipv4.address | default('127.0.0.1') }}"
|
|
||||||
|
|
||||||
- name: Parameter name should be required
|
|
||||||
docker_config:
|
|
||||||
state: present
|
|
||||||
ignore_errors: true
|
|
||||||
register: output
|
|
||||||
|
|
||||||
- name: Assert failure when called with no name
|
|
||||||
assert:
|
|
||||||
that:
|
|
||||||
- 'output is failed'
|
|
||||||
- 'output.msg == "missing required arguments: name"'
|
|
||||||
|
|
||||||
- name: Test parameters
|
|
||||||
docker_config:
|
|
||||||
name: foo
|
|
||||||
state: present
|
|
||||||
ignore_errors: true
|
|
||||||
register: output
|
|
||||||
|
|
||||||
- name: Assert failure when called with no data
|
|
||||||
assert:
|
|
||||||
that:
|
|
||||||
- 'output is failed'
|
|
||||||
- 'output.msg == "state is present but any of the following are missing: data, data_src"'
|
|
||||||
|
|
||||||
- name: Create config
|
|
||||||
docker_config:
|
|
||||||
name: db_password
|
|
||||||
data: opensesame!
|
|
||||||
state: present
|
|
||||||
register: output
|
|
||||||
|
|
||||||
- name: Create variable config_id
|
|
||||||
set_fact:
|
|
||||||
config_id: "{{ output.config_id }}"
|
|
||||||
|
|
||||||
- name: Inspect config
|
|
||||||
command: "docker config inspect {{ config_id }}"
|
|
||||||
register: inspect
|
|
||||||
ignore_errors: true
|
|
||||||
|
|
||||||
- debug:
|
|
||||||
var: inspect
|
|
||||||
|
|
||||||
- name: Assert config creation succeeded
|
|
||||||
assert:
|
|
||||||
that:
|
|
||||||
- "'db_password' in inspect.stdout"
|
|
||||||
- "'ansible_key' in inspect.stdout"
|
|
||||||
when: inspect is not failed
|
|
||||||
- assert:
|
|
||||||
that:
|
|
||||||
- "'is too new. Maximum supported API version is' in inspect.stderr"
|
|
||||||
when: inspect is failed
|
|
||||||
|
|
||||||
- name: Create config again
|
|
||||||
docker_config:
|
|
||||||
name: db_password
|
|
||||||
data: opensesame!
|
|
||||||
state: present
|
|
||||||
register: output
|
|
||||||
|
|
||||||
- name: Assert create config is idempotent
|
|
||||||
assert:
|
|
||||||
that:
|
|
||||||
- output is not changed
|
|
||||||
|
|
||||||
- name: Write config into file
|
|
||||||
copy:
|
|
||||||
dest: "{{ remote_tmp_dir }}/data"
|
|
||||||
content: |-
|
|
||||||
opensesame!
|
|
||||||
|
|
||||||
- name: Create config again (from file)
|
|
||||||
docker_config:
|
|
||||||
name: db_password
|
|
||||||
data_src: "{{ remote_tmp_dir }}/data"
|
|
||||||
state: present
|
|
||||||
register: output
|
|
||||||
|
|
||||||
- name: Assert create config is idempotent
|
|
||||||
assert:
|
|
||||||
that:
|
|
||||||
- output is not changed
|
|
||||||
|
|
||||||
- name: Create config again (base64)
|
|
||||||
docker_config:
|
|
||||||
name: db_password
|
|
||||||
data: b3BlbnNlc2FtZSE=
|
|
||||||
data_is_b64: true
|
|
||||||
state: present
|
|
||||||
register: output
|
|
||||||
|
|
||||||
- name: Assert create config (base64) is idempotent
|
|
||||||
assert:
|
|
||||||
that:
|
|
||||||
- output is not changed
|
|
||||||
|
|
||||||
- name: Update config
|
|
||||||
docker_config:
|
|
||||||
name: db_password
|
|
||||||
data: newpassword!
|
|
||||||
state: present
|
|
||||||
register: output
|
|
||||||
|
|
||||||
- name: Assert config was updated
|
|
||||||
assert:
|
|
||||||
that:
|
|
||||||
- output is changed
|
|
||||||
- output.config_id != config_id
|
|
||||||
|
|
||||||
- name: Remove config
|
|
||||||
docker_config:
|
|
||||||
name: db_password
|
|
||||||
state: absent
|
|
||||||
|
|
||||||
- name: Check that config is removed
|
|
||||||
command: "docker config inspect {{ config_id }}"
|
|
||||||
register: output
|
|
||||||
ignore_errors: true
|
|
||||||
|
|
||||||
- name: Assert config was removed
|
|
||||||
assert:
|
|
||||||
that:
|
|
||||||
- output is failed
|
|
||||||
|
|
||||||
- name: Remove config
|
|
||||||
docker_config:
|
|
||||||
name: db_password
|
|
||||||
state: absent
|
|
||||||
register: output
|
|
||||||
|
|
||||||
- name: Assert remove config is idempotent
|
|
||||||
assert:
|
|
||||||
that:
|
|
||||||
- output is not changed
|
|
||||||
|
|
||||||
# Rolling update
|
|
||||||
|
|
||||||
- name: Create rolling config
|
|
||||||
docker_config:
|
|
||||||
name: rolling_password
|
|
||||||
data: opensesame!
|
|
||||||
rolling_versions: true
|
|
||||||
state: present
|
|
||||||
register: original_output
|
|
||||||
|
|
||||||
- name: Create variable config_id
|
|
||||||
set_fact:
|
|
||||||
config_id: "{{ original_output.config_id }}"
|
|
||||||
|
|
||||||
- name: Inspect config
|
|
||||||
command: "docker config inspect {{ config_id }}"
|
|
||||||
register: inspect
|
|
||||||
ignore_errors: true
|
|
||||||
|
|
||||||
- debug:
|
|
||||||
var: inspect
|
|
||||||
|
|
||||||
- name: Assert config creation succeeded
|
|
||||||
assert:
|
|
||||||
that:
|
|
||||||
- "'rolling_password' in inspect.stdout"
|
|
||||||
- "'ansible_key' in inspect.stdout"
|
|
||||||
- "'ansible_version' in inspect.stdout"
|
|
||||||
- original_output.config_name == 'rolling_password_v1'
|
|
||||||
when: inspect is not failed
|
|
||||||
- assert:
|
|
||||||
that:
|
|
||||||
- "'is too new. Maximum supported API version is' in inspect.stderr"
|
|
||||||
when: inspect is failed
|
|
||||||
|
|
||||||
- name: Create config again
|
|
||||||
docker_config:
|
|
||||||
name: rolling_password
|
|
||||||
data: newpassword!
|
|
||||||
rolling_versions: true
|
|
||||||
state: present
|
|
||||||
register: new_output
|
|
||||||
|
|
||||||
- name: Assert that new version is created
|
|
||||||
assert:
|
|
||||||
that:
|
|
||||||
- new_output is changed
|
|
||||||
- new_output.config_id != original_output.config_id
|
|
||||||
- new_output.config_name != original_output.config_name
|
|
||||||
- new_output.config_name == 'rolling_password_v2'
|
|
||||||
|
|
||||||
- name: Remove rolling configs
|
|
||||||
docker_config:
|
|
||||||
name: rolling_password
|
|
||||||
rolling_versions: true
|
|
||||||
state: absent
|
|
||||||
|
|
||||||
- name: Check that config is removed
|
|
||||||
command: "docker config inspect {{ original_output.config_id }}"
|
|
||||||
register: output
|
|
||||||
ignore_errors: true
|
|
||||||
|
|
||||||
- name: Assert config was removed
|
|
||||||
assert:
|
|
||||||
that:
|
|
||||||
- output is failed
|
|
||||||
|
|
||||||
- name: Check that config is removed
|
|
||||||
command: "docker config inspect {{ new_output.config_id }}"
|
|
||||||
register: output
|
|
||||||
ignore_errors: true
|
|
||||||
|
|
||||||
- name: Assert config was removed
|
|
||||||
assert:
|
|
||||||
that:
|
|
||||||
- output is failed
|
|
||||||
|
|
||||||
# template_driver tests
|
|
||||||
|
|
||||||
- when: docker_py_version is version('5.0.3', '>=') and docker_api_version is version('1.37', '>=')
|
|
||||||
block:
|
|
||||||
|
|
||||||
- name: Create regular config
|
|
||||||
docker_config:
|
|
||||||
name: db_password
|
|
||||||
data: opensesame!
|
|
||||||
state: present
|
state: present
|
||||||
|
advertise_addr: "{{ ansible_default_ipv4.address | default('127.0.0.1') }}"
|
||||||
|
|
||||||
- name: Update config with template_driver
|
- name: Parameter name should be required
|
||||||
docker_config:
|
docker_config:
|
||||||
name: db_password
|
|
||||||
data: opensesame!
|
|
||||||
template_driver: golang
|
|
||||||
state: present
|
|
||||||
register: output
|
|
||||||
|
|
||||||
- name: Assert config was updated
|
|
||||||
assert:
|
|
||||||
that:
|
|
||||||
- output is changed
|
|
||||||
|
|
||||||
- name: Invalid template_driver
|
|
||||||
docker_config:
|
|
||||||
name: db_password
|
|
||||||
data: opensesame!
|
|
||||||
template_driver: "not a template driver"
|
|
||||||
state: present
|
state: present
|
||||||
ignore_errors: true
|
ignore_errors: true
|
||||||
register: output
|
register: output
|
||||||
|
|
||||||
- name: Assert failure when called with invalid template_driver
|
- name: Assert failure when called with no name
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- 'output is failed'
|
- 'output is failed'
|
||||||
- 'output.msg == "value of template_driver must be one of: golang, got: not a template driver"'
|
- 'output.msg == "missing required arguments: name"'
|
||||||
|
|
||||||
|
- name: Test parameters
|
||||||
|
docker_config:
|
||||||
|
name: foo
|
||||||
|
state: present
|
||||||
|
ignore_errors: true
|
||||||
|
register: output
|
||||||
|
|
||||||
|
- name: Assert failure when called with no data
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- 'output is failed'
|
||||||
|
- 'output.msg == "state is present but any of the following are missing: data, data_src"'
|
||||||
|
|
||||||
|
- name: Create config
|
||||||
|
docker_config:
|
||||||
|
name: db_password
|
||||||
|
data: opensesame!
|
||||||
|
state: present
|
||||||
|
register: output
|
||||||
|
|
||||||
|
- name: Create variable config_id
|
||||||
|
set_fact:
|
||||||
|
config_id: "{{ output.config_id }}"
|
||||||
|
|
||||||
|
- name: Inspect config
|
||||||
|
command: "docker config inspect {{ config_id }}"
|
||||||
|
register: inspect
|
||||||
|
ignore_errors: true
|
||||||
|
|
||||||
|
- debug:
|
||||||
|
var: inspect
|
||||||
|
|
||||||
|
- name: Assert config creation succeeded
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- "'db_password' in inspect.stdout"
|
||||||
|
- "'ansible_key' in inspect.stdout"
|
||||||
|
when: inspect is not failed
|
||||||
|
- assert:
|
||||||
|
that:
|
||||||
|
- "'is too new. Maximum supported API version is' in inspect.stderr"
|
||||||
|
when: inspect is failed
|
||||||
|
|
||||||
- name: Create config again
|
- name: Create config again
|
||||||
docker_config:
|
docker_config:
|
||||||
name: db_password
|
name: db_password
|
||||||
data: opensesame!
|
data: opensesame!
|
||||||
template_driver: golang
|
|
||||||
state: present
|
state: present
|
||||||
register: output
|
register: output
|
||||||
|
|
||||||
- name: Assert create config is idempotent
|
- name: Assert create config is idempotent
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- output is not changed
|
- output is not changed
|
||||||
|
|
||||||
# data is the docker swarm's name
|
- name: Write config into file
|
||||||
- name: Update config with template data
|
copy:
|
||||||
|
dest: "{{ remote_tmp_dir }}/data"
|
||||||
|
content: |-
|
||||||
|
opensesame!
|
||||||
|
|
||||||
|
- name: Create config again (from file)
|
||||||
docker_config:
|
docker_config:
|
||||||
name: db_password
|
name: db_password
|
||||||
data: "{{ '{{' }} .Service.Name {{ '}}' }}"
|
data_src: "{{ remote_tmp_dir }}/data"
|
||||||
template_driver: golang
|
|
||||||
state: present
|
state: present
|
||||||
register: output
|
register: output
|
||||||
|
|
||||||
- name: Inspect config
|
- name: Assert create config is idempotent
|
||||||
command: "docker config inspect {{ output.config_id }}"
|
|
||||||
register: inspect
|
|
||||||
|
|
||||||
- name: Show inspection result
|
|
||||||
debug:
|
|
||||||
var: inspect
|
|
||||||
|
|
||||||
- name: Assert config creation succeeded
|
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- "'db_password' in inspect.stdout"
|
- output is not changed
|
||||||
- "'ansible_key' in inspect.stdout"
|
|
||||||
# According to the API docs, 'Data' is "Base64-url-safe-encoded (RFC 4648) config data."
|
- name: Create config again (base64)
|
||||||
- "'\"Data\": \"e3sgLlNlcnZpY2UuTmFtZSB9fQ==\"' in inspect.stdout"
|
docker_config:
|
||||||
- "'Templating' in inspect.stdout"
|
name: db_password
|
||||||
- "'\"Name\": \"golang\"' in inspect.stdout"
|
data: b3BlbnNlc2FtZSE=
|
||||||
|
data_is_b64: true
|
||||||
|
state: present
|
||||||
|
register: output
|
||||||
|
|
||||||
|
- name: Assert create config (base64) is idempotent
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- output is not changed
|
||||||
|
|
||||||
|
- name: Update config
|
||||||
|
docker_config:
|
||||||
|
name: db_password
|
||||||
|
data: newpassword!
|
||||||
|
state: present
|
||||||
|
register: output
|
||||||
|
|
||||||
|
- name: Assert config was updated
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- output is changed
|
||||||
|
- output.config_id != config_id
|
||||||
|
|
||||||
- name: Remove config
|
- name: Remove config
|
||||||
docker_config:
|
docker_config:
|
||||||
@ -318,7 +136,7 @@
|
|||||||
state: absent
|
state: absent
|
||||||
|
|
||||||
- name: Check that config is removed
|
- name: Check that config is removed
|
||||||
command: "docker config inspect {{ output.config_id }}"
|
command: "docker config inspect {{ config_id }}"
|
||||||
register: output
|
register: output
|
||||||
ignore_errors: true
|
ignore_errors: true
|
||||||
|
|
||||||
@ -327,8 +145,190 @@
|
|||||||
that:
|
that:
|
||||||
- output is failed
|
- output is failed
|
||||||
|
|
||||||
|
- name: Remove config
|
||||||
|
docker_config:
|
||||||
|
name: db_password
|
||||||
|
state: absent
|
||||||
|
register: output
|
||||||
|
|
||||||
|
- name: Assert remove config is idempotent
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- output is not changed
|
||||||
|
|
||||||
|
# Rolling update
|
||||||
|
|
||||||
|
- name: Create rolling config
|
||||||
|
docker_config:
|
||||||
|
name: rolling_password
|
||||||
|
data: opensesame!
|
||||||
|
rolling_versions: true
|
||||||
|
state: present
|
||||||
|
register: original_output
|
||||||
|
|
||||||
|
- name: Create variable config_id
|
||||||
|
set_fact:
|
||||||
|
config_id: "{{ original_output.config_id }}"
|
||||||
|
|
||||||
|
- name: Inspect config
|
||||||
|
command: "docker config inspect {{ config_id }}"
|
||||||
|
register: inspect
|
||||||
|
ignore_errors: true
|
||||||
|
|
||||||
|
- debug:
|
||||||
|
var: inspect
|
||||||
|
|
||||||
|
- name: Assert config creation succeeded
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- "'rolling_password' in inspect.stdout"
|
||||||
|
- "'ansible_key' in inspect.stdout"
|
||||||
|
- "'ansible_version' in inspect.stdout"
|
||||||
|
- original_output.config_name == 'rolling_password_v1'
|
||||||
|
when: inspect is not failed
|
||||||
|
- assert:
|
||||||
|
that:
|
||||||
|
- "'is too new. Maximum supported API version is' in inspect.stderr"
|
||||||
|
when: inspect is failed
|
||||||
|
|
||||||
|
- name: Create config again
|
||||||
|
docker_config:
|
||||||
|
name: rolling_password
|
||||||
|
data: newpassword!
|
||||||
|
rolling_versions: true
|
||||||
|
state: present
|
||||||
|
register: new_output
|
||||||
|
|
||||||
|
- name: Assert that new version is created
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- new_output is changed
|
||||||
|
- new_output.config_id != original_output.config_id
|
||||||
|
- new_output.config_name != original_output.config_name
|
||||||
|
- new_output.config_name == 'rolling_password_v2'
|
||||||
|
|
||||||
|
- name: Remove rolling configs
|
||||||
|
docker_config:
|
||||||
|
name: rolling_password
|
||||||
|
rolling_versions: true
|
||||||
|
state: absent
|
||||||
|
|
||||||
|
- name: Check that config is removed
|
||||||
|
command: "docker config inspect {{ original_output.config_id }}"
|
||||||
|
register: output
|
||||||
|
ignore_errors: true
|
||||||
|
|
||||||
|
- name: Assert config was removed
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- output is failed
|
||||||
|
|
||||||
|
- name: Check that config is removed
|
||||||
|
command: "docker config inspect {{ new_output.config_id }}"
|
||||||
|
register: output
|
||||||
|
ignore_errors: true
|
||||||
|
|
||||||
|
- name: Assert config was removed
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- output is failed
|
||||||
|
|
||||||
|
# template_driver tests
|
||||||
|
|
||||||
|
- when: docker_py_version is version('5.0.3', '>=') and docker_api_version is version('1.37', '>=')
|
||||||
|
block:
|
||||||
|
|
||||||
|
- name: Create regular config
|
||||||
|
docker_config:
|
||||||
|
name: db_password
|
||||||
|
data: opensesame!
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Update config with template_driver
|
||||||
|
docker_config:
|
||||||
|
name: db_password
|
||||||
|
data: opensesame!
|
||||||
|
template_driver: golang
|
||||||
|
state: present
|
||||||
|
register: output
|
||||||
|
|
||||||
|
- name: Assert config was updated
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- output is changed
|
||||||
|
|
||||||
|
- name: Invalid template_driver
|
||||||
|
docker_config:
|
||||||
|
name: db_password
|
||||||
|
data: opensesame!
|
||||||
|
template_driver: "not a template driver"
|
||||||
|
state: present
|
||||||
|
ignore_errors: true
|
||||||
|
register: output
|
||||||
|
|
||||||
|
- name: Assert failure when called with invalid template_driver
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- 'output is failed'
|
||||||
|
- 'output.msg == "value of template_driver must be one of: golang, got: not a template driver"'
|
||||||
|
|
||||||
|
- name: Create config again
|
||||||
|
docker_config:
|
||||||
|
name: db_password
|
||||||
|
data: opensesame!
|
||||||
|
template_driver: golang
|
||||||
|
state: present
|
||||||
|
register: output
|
||||||
|
|
||||||
|
- name: Assert create config is idempotent
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- output is not changed
|
||||||
|
|
||||||
|
# data is the docker swarm's name
|
||||||
|
- name: Update config with template data
|
||||||
|
docker_config:
|
||||||
|
name: db_password
|
||||||
|
data: "{{ '{{' }} .Service.Name {{ '}}' }}"
|
||||||
|
template_driver: golang
|
||||||
|
state: present
|
||||||
|
register: output
|
||||||
|
|
||||||
|
- name: Inspect config
|
||||||
|
command: "docker config inspect {{ output.config_id }}"
|
||||||
|
register: inspect
|
||||||
|
|
||||||
|
- name: Show inspection result
|
||||||
|
debug:
|
||||||
|
var: inspect
|
||||||
|
|
||||||
|
- name: Assert config creation succeeded
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- "'db_password' in inspect.stdout"
|
||||||
|
- "'ansible_key' in inspect.stdout"
|
||||||
|
# According to the API docs, 'Data' is "Base64-url-safe-encoded (RFC 4648) config data."
|
||||||
|
- "'\"Data\": \"e3sgLlNlcnZpY2UuTmFtZSB9fQ==\"' in inspect.stdout"
|
||||||
|
- "'Templating' in inspect.stdout"
|
||||||
|
- "'\"Name\": \"golang\"' in inspect.stdout"
|
||||||
|
|
||||||
|
- name: Remove config
|
||||||
|
docker_config:
|
||||||
|
name: db_password
|
||||||
|
state: absent
|
||||||
|
|
||||||
|
- name: Check that config is removed
|
||||||
|
command: "docker config inspect {{ output.config_id }}"
|
||||||
|
register: output
|
||||||
|
ignore_errors: true
|
||||||
|
|
||||||
|
- name: Assert config was removed
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- output is failed
|
||||||
|
|
||||||
always:
|
always:
|
||||||
- name: Remove a Swarm cluster
|
- name: Remove a Swarm cluster
|
||||||
docker_swarm:
|
docker_swarm:
|
||||||
state: absent
|
state: absent
|
||||||
force: true
|
force: true
|
||||||
|
|||||||
@ -56,9 +56,9 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- value_1 is changed
|
- value_1 is changed
|
||||||
- value_2 is not changed
|
- value_2 is not changed
|
||||||
- value_3 is changed
|
- value_3 is changed
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
## list ############################################################
|
## list ############################################################
|
||||||
@ -71,8 +71,8 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
dns_servers:
|
dns_servers:
|
||||||
- 1.1.1.1
|
- 1.1.1.1
|
||||||
- 8.8.8.8
|
- 8.8.8.8
|
||||||
register: list_1
|
register: list_1
|
||||||
|
|
||||||
- name: list (change, ignore)
|
- name: list (change, ignore)
|
||||||
@ -82,7 +82,7 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
dns_servers:
|
dns_servers:
|
||||||
- 9.9.9.9
|
- 9.9.9.9
|
||||||
force_kill: true
|
force_kill: true
|
||||||
comparisons:
|
comparisons:
|
||||||
dns_servers: ignore
|
dns_servers: ignore
|
||||||
@ -95,7 +95,7 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
dns_servers:
|
dns_servers:
|
||||||
- 9.9.9.9
|
- 9.9.9.9
|
||||||
force_kill: true
|
force_kill: true
|
||||||
comparisons:
|
comparisons:
|
||||||
dns_servers: strict
|
dns_servers: strict
|
||||||
@ -110,9 +110,9 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- list_1 is changed
|
- list_1 is changed
|
||||||
- list_2 is not changed
|
- list_2 is not changed
|
||||||
- list_3 is changed
|
- list_3 is changed
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
## set #############################################################
|
## set #############################################################
|
||||||
@ -125,8 +125,8 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
groups:
|
groups:
|
||||||
- "1010"
|
- "1010"
|
||||||
- "1011"
|
- "1011"
|
||||||
register: set_1
|
register: set_1
|
||||||
|
|
||||||
- name: set (change, ignore)
|
- name: set (change, ignore)
|
||||||
@ -136,9 +136,9 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
groups:
|
groups:
|
||||||
- "1010"
|
- "1010"
|
||||||
- "1011"
|
- "1011"
|
||||||
- "1012"
|
- "1012"
|
||||||
force_kill: true
|
force_kill: true
|
||||||
comparisons:
|
comparisons:
|
||||||
groups: ignore
|
groups: ignore
|
||||||
@ -151,9 +151,9 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
groups:
|
groups:
|
||||||
- "1010"
|
- "1010"
|
||||||
- "1011"
|
- "1011"
|
||||||
- "1012"
|
- "1012"
|
||||||
force_kill: true
|
force_kill: true
|
||||||
comparisons:
|
comparisons:
|
||||||
groups: allow_more_present
|
groups: allow_more_present
|
||||||
@ -166,8 +166,8 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
groups:
|
groups:
|
||||||
- "1010"
|
- "1010"
|
||||||
- "1012"
|
- "1012"
|
||||||
force_kill: true
|
force_kill: true
|
||||||
comparisons:
|
comparisons:
|
||||||
groups: allow_more_present
|
groups: allow_more_present
|
||||||
@ -180,8 +180,8 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
groups:
|
groups:
|
||||||
- "1010"
|
- "1010"
|
||||||
- "1012"
|
- "1012"
|
||||||
force_kill: true
|
force_kill: true
|
||||||
comparisons:
|
comparisons:
|
||||||
groups: strict
|
groups: strict
|
||||||
@ -196,11 +196,11 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- set_1 is changed
|
- set_1 is changed
|
||||||
- set_2 is not changed
|
- set_2 is not changed
|
||||||
- set_3 is changed
|
- set_3 is changed
|
||||||
- set_4 is not changed
|
- set_4 is not changed
|
||||||
- set_5 is changed
|
- set_5 is changed
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
## set(dict) #######################################################
|
## set(dict) #######################################################
|
||||||
@ -213,8 +213,8 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
devices:
|
devices:
|
||||||
- "/dev/random:/dev/virt-random:rwm"
|
- "/dev/random:/dev/virt-random:rwm"
|
||||||
- "/dev/urandom:/dev/virt-urandom:rwm"
|
- "/dev/urandom:/dev/virt-urandom:rwm"
|
||||||
register: set_dict_1
|
register: set_dict_1
|
||||||
|
|
||||||
- name: set(dict) (change, ignore)
|
- name: set(dict) (change, ignore)
|
||||||
@ -224,9 +224,9 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
devices:
|
devices:
|
||||||
- "/dev/random:/dev/virt-random:rwm"
|
- "/dev/random:/dev/virt-random:rwm"
|
||||||
- "/dev/urandom:/dev/virt-urandom:rwm"
|
- "/dev/urandom:/dev/virt-urandom:rwm"
|
||||||
- "/dev/null:/dev/virt-null:rwm"
|
- "/dev/null:/dev/virt-null:rwm"
|
||||||
force_kill: true
|
force_kill: true
|
||||||
comparisons:
|
comparisons:
|
||||||
devices: ignore
|
devices: ignore
|
||||||
@ -239,9 +239,9 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
devices:
|
devices:
|
||||||
- "/dev/random:/dev/virt-random:rwm"
|
- "/dev/random:/dev/virt-random:rwm"
|
||||||
- "/dev/urandom:/dev/virt-urandom:rwm"
|
- "/dev/urandom:/dev/virt-urandom:rwm"
|
||||||
- "/dev/null:/dev/virt-null:rwm"
|
- "/dev/null:/dev/virt-null:rwm"
|
||||||
force_kill: true
|
force_kill: true
|
||||||
comparisons:
|
comparisons:
|
||||||
devices: allow_more_present
|
devices: allow_more_present
|
||||||
@ -254,8 +254,8 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
devices:
|
devices:
|
||||||
- "/dev/random:/dev/virt-random:rwm"
|
- "/dev/random:/dev/virt-random:rwm"
|
||||||
- "/dev/null:/dev/virt-null:rwm"
|
- "/dev/null:/dev/virt-null:rwm"
|
||||||
force_kill: true
|
force_kill: true
|
||||||
comparisons:
|
comparisons:
|
||||||
devices: allow_more_present
|
devices: allow_more_present
|
||||||
@ -268,8 +268,8 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
devices:
|
devices:
|
||||||
- "/dev/random:/dev/virt-random:rwm"
|
- "/dev/random:/dev/virt-random:rwm"
|
||||||
- "/dev/null:/dev/virt-null:rwm"
|
- "/dev/null:/dev/virt-null:rwm"
|
||||||
force_kill: true
|
force_kill: true
|
||||||
comparisons:
|
comparisons:
|
||||||
devices: strict
|
devices: strict
|
||||||
@ -284,11 +284,11 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- set_dict_1 is changed
|
- set_dict_1 is changed
|
||||||
- set_dict_2 is not changed
|
- set_dict_2 is not changed
|
||||||
- set_dict_3 is changed
|
- set_dict_3 is changed
|
||||||
- set_dict_4 is not changed
|
- set_dict_4 is not changed
|
||||||
- set_dict_5 is changed
|
- set_dict_5 is changed
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
## dict ############################################################
|
## dict ############################################################
|
||||||
@ -372,11 +372,11 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- dict_1 is changed
|
- dict_1 is changed
|
||||||
- dict_2 is not changed
|
- dict_2 is not changed
|
||||||
- dict_3 is changed
|
- dict_3 is changed
|
||||||
- dict_4 is not changed
|
- dict_4 is not changed
|
||||||
- dict_5 is changed
|
- dict_5 is changed
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
## wildcard ########################################################
|
## wildcard ########################################################
|
||||||
@ -460,7 +460,7 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- wildcard_1 is changed
|
- wildcard_1 is changed
|
||||||
- wildcard_2 is not changed
|
- wildcard_2 is not changed
|
||||||
- wildcard_3 is changed
|
- wildcard_3 is changed
|
||||||
- wildcard_4 is not changed
|
- wildcard_4 is not changed
|
||||||
|
|||||||
@ -60,10 +60,10 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- start_1 is changed
|
- start_1 is changed
|
||||||
- start_2 is changed
|
- start_2 is changed
|
||||||
- start_3 is not changed
|
- start_3 is not changed
|
||||||
- start_4 is not changed
|
- start_4 is not changed
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
## container_default_behavior: no_defaults #########################
|
## container_default_behavior: no_defaults #########################
|
||||||
@ -116,7 +116,7 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- start_1 is changed
|
- start_1 is changed
|
||||||
- start_2 is changed
|
- start_2 is changed
|
||||||
- start_3 is not changed
|
- start_3 is not changed
|
||||||
- start_4 is not changed
|
- start_4 is not changed
|
||||||
|
|||||||
@ -22,8 +22,8 @@
|
|||||||
- name: Get image ID of {{ docker_test_image_hello_world }} and {{ docker_test_image_alpine }} images
|
- name: Get image ID of {{ docker_test_image_hello_world }} and {{ docker_test_image_alpine }} images
|
||||||
docker_image_info:
|
docker_image_info:
|
||||||
name:
|
name:
|
||||||
- "{{ docker_test_image_hello_world }}"
|
- "{{ docker_test_image_hello_world }}"
|
||||||
- "{{ docker_test_image_alpine }}"
|
- "{{ docker_test_image_alpine }}"
|
||||||
register: image_info
|
register: image_info
|
||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
|
|||||||
@ -29,13 +29,13 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
mounts:
|
mounts:
|
||||||
- source: /tmp
|
- source: /tmp
|
||||||
target: /tmp
|
target: /tmp
|
||||||
type: bind
|
type: bind
|
||||||
- source: /
|
- source: /
|
||||||
target: /whatever
|
target: /whatever
|
||||||
type: bind
|
type: bind
|
||||||
read_only: false
|
read_only: false
|
||||||
register: mounts_1
|
register: mounts_1
|
||||||
|
|
||||||
- name: mounts (idempotency)
|
- name: mounts (idempotency)
|
||||||
@ -45,13 +45,13 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
mounts:
|
mounts:
|
||||||
- source: /
|
- source: /
|
||||||
target: /whatever
|
target: /whatever
|
||||||
type: bind
|
type: bind
|
||||||
read_only: false
|
read_only: false
|
||||||
- source: /tmp
|
- source: /tmp
|
||||||
target: /tmp
|
target: /tmp
|
||||||
type: bind
|
type: bind
|
||||||
register: mounts_2
|
register: mounts_2
|
||||||
|
|
||||||
- name: mounts (less mounts)
|
- name: mounts (less mounts)
|
||||||
@ -61,9 +61,9 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
mounts:
|
mounts:
|
||||||
- source: /tmp
|
- source: /tmp
|
||||||
target: /tmp
|
target: /tmp
|
||||||
type: bind
|
type: bind
|
||||||
register: mounts_3
|
register: mounts_3
|
||||||
|
|
||||||
- name: mounts (more mounts)
|
- name: mounts (more mounts)
|
||||||
@ -73,13 +73,13 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
mounts:
|
mounts:
|
||||||
- source: /tmp
|
- source: /tmp
|
||||||
target: /tmp
|
target: /tmp
|
||||||
type: bind
|
type: bind
|
||||||
- source: /tmp
|
- source: /tmp
|
||||||
target: /somewhereelse
|
target: /somewhereelse
|
||||||
type: bind
|
type: bind
|
||||||
read_only: true
|
read_only: true
|
||||||
force_kill: true
|
force_kill: true
|
||||||
register: mounts_4
|
register: mounts_4
|
||||||
|
|
||||||
@ -90,13 +90,13 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
mounts:
|
mounts:
|
||||||
- source: /tmp
|
- source: /tmp
|
||||||
target: /tmp
|
target: /tmp
|
||||||
type: bind
|
type: bind
|
||||||
- source: /tmp
|
- source: /tmp
|
||||||
target: /somewhereelse
|
target: /somewhereelse
|
||||||
type: bind
|
type: bind
|
||||||
read_only: false
|
read_only: false
|
||||||
force_kill: true
|
force_kill: true
|
||||||
register: mounts_5
|
register: mounts_5
|
||||||
|
|
||||||
@ -107,13 +107,13 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
mounts:
|
mounts:
|
||||||
- source: /home
|
- source: /home
|
||||||
target: /x
|
target: /x
|
||||||
type: bind
|
type: bind
|
||||||
- source: /etc
|
- source: /etc
|
||||||
target: /x
|
target: /x
|
||||||
type: bind
|
type: bind
|
||||||
read_only: false
|
read_only: false
|
||||||
force_kill: true
|
force_kill: true
|
||||||
register: mounts_6
|
register: mounts_6
|
||||||
ignore_errors: true
|
ignore_errors: true
|
||||||
@ -151,15 +151,15 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- mounts_1 is changed
|
- mounts_1 is changed
|
||||||
- mounts_2 is not changed
|
- mounts_2 is not changed
|
||||||
- mounts_3 is not changed
|
- mounts_3 is not changed
|
||||||
- mounts_4 is changed
|
- mounts_4 is changed
|
||||||
- mounts_5 is changed
|
- mounts_5 is changed
|
||||||
- mounts_6 is failed
|
- mounts_6 is failed
|
||||||
- "'The mount point \"/x\" appears twice in the mounts option' == mounts_6.msg"
|
- "'The mount point \"/x\" appears twice in the mounts option' == mounts_6.msg"
|
||||||
- mounts_7 is changed
|
- mounts_7 is changed
|
||||||
- mounts_8 is not changed
|
- mounts_8 is not changed
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
## tmpfs ###########################################################
|
## tmpfs ###########################################################
|
||||||
@ -172,14 +172,14 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
mounts:
|
mounts:
|
||||||
- target: /cache1
|
- target: /cache1
|
||||||
type: tmpfs
|
type: tmpfs
|
||||||
tmpfs_mode: "1777"
|
tmpfs_mode: "1777"
|
||||||
tmpfs_size: "1GB"
|
tmpfs_size: "1GB"
|
||||||
- target: /cache2
|
- target: /cache2
|
||||||
type: tmpfs
|
type: tmpfs
|
||||||
tmpfs_mode: "1777"
|
tmpfs_mode: "1777"
|
||||||
tmpfs_size: "1GB"
|
tmpfs_size: "1GB"
|
||||||
force_kill: true
|
force_kill: true
|
||||||
register: tmpfs_1
|
register: tmpfs_1
|
||||||
|
|
||||||
@ -190,14 +190,14 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
mounts:
|
mounts:
|
||||||
- target: /cache2
|
- target: /cache2
|
||||||
type: tmpfs
|
type: tmpfs
|
||||||
tmpfs_mode: "1777"
|
tmpfs_mode: "1777"
|
||||||
tmpfs_size: "1GB"
|
tmpfs_size: "1GB"
|
||||||
- target: /cache1
|
- target: /cache1
|
||||||
type: tmpfs
|
type: tmpfs
|
||||||
tmpfs_mode: "1777"
|
tmpfs_mode: "1777"
|
||||||
tmpfs_size: "1GB"
|
tmpfs_size: "1GB"
|
||||||
force_kill: true
|
force_kill: true
|
||||||
register: tmpfs_2
|
register: tmpfs_2
|
||||||
|
|
||||||
@ -208,18 +208,18 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
mounts:
|
mounts:
|
||||||
- target: /cache1
|
- target: /cache1
|
||||||
type: tmpfs
|
type: tmpfs
|
||||||
tmpfs_mode: "1777"
|
tmpfs_mode: "1777"
|
||||||
tmpfs_size: "1GB"
|
tmpfs_size: "1GB"
|
||||||
- target: /cache2
|
- target: /cache2
|
||||||
type: tmpfs
|
type: tmpfs
|
||||||
tmpfs_mode: "1777"
|
tmpfs_mode: "1777"
|
||||||
tmpfs_size: "1GB"
|
tmpfs_size: "1GB"
|
||||||
- target: /cache3
|
- target: /cache3
|
||||||
type: tmpfs
|
type: tmpfs
|
||||||
tmpfs_mode: "1777"
|
tmpfs_mode: "1777"
|
||||||
tmpfs_size: "1GB"
|
tmpfs_size: "1GB"
|
||||||
force_kill: true
|
force_kill: true
|
||||||
register: tmpfs_3
|
register: tmpfs_3
|
||||||
|
|
||||||
@ -230,10 +230,10 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
mounts:
|
mounts:
|
||||||
- target: /cache1
|
- target: /cache1
|
||||||
type: tmpfs
|
type: tmpfs
|
||||||
tmpfs_mode: "1700"
|
tmpfs_mode: "1700"
|
||||||
tmpfs_size: "1GB"
|
tmpfs_size: "1GB"
|
||||||
force_kill: true
|
force_kill: true
|
||||||
register: tmpfs_4
|
register: tmpfs_4
|
||||||
|
|
||||||
@ -244,10 +244,10 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
mounts:
|
mounts:
|
||||||
- target: /cache1
|
- target: /cache1
|
||||||
type: tmpfs
|
type: tmpfs
|
||||||
tmpfs_mode: "1700"
|
tmpfs_mode: "1700"
|
||||||
tmpfs_size: "2GB"
|
tmpfs_size: "2GB"
|
||||||
force_kill: true
|
force_kill: true
|
||||||
register: tmpfs_5
|
register: tmpfs_5
|
||||||
|
|
||||||
@ -260,11 +260,11 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- tmpfs_1 is changed
|
- tmpfs_1 is changed
|
||||||
- tmpfs_2 is not changed
|
- tmpfs_2 is not changed
|
||||||
- tmpfs_3 is changed
|
- tmpfs_3 is changed
|
||||||
- tmpfs_4 is changed
|
- tmpfs_4 is changed
|
||||||
- tmpfs_5 is changed
|
- tmpfs_5 is changed
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
## mounts + volumes ################################################
|
## mounts + volumes ################################################
|
||||||
@ -277,12 +277,12 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
mounts:
|
mounts:
|
||||||
- source: /
|
- source: /
|
||||||
target: /whatever
|
target: /whatever
|
||||||
type: bind
|
type: bind
|
||||||
read_only: true
|
read_only: true
|
||||||
volumes:
|
volumes:
|
||||||
- /tmp:/tmp
|
- /tmp:/tmp
|
||||||
register: mounts_volumes_1
|
register: mounts_volumes_1
|
||||||
|
|
||||||
- name: mounts + volumes (idempotency)
|
- name: mounts + volumes (idempotency)
|
||||||
@ -292,12 +292,12 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
mounts:
|
mounts:
|
||||||
- source: /
|
- source: /
|
||||||
target: /whatever
|
target: /whatever
|
||||||
type: bind
|
type: bind
|
||||||
read_only: true
|
read_only: true
|
||||||
volumes:
|
volumes:
|
||||||
- /tmp:/tmp
|
- /tmp:/tmp
|
||||||
register: mounts_volumes_2
|
register: mounts_volumes_2
|
||||||
|
|
||||||
- name: mounts + volumes (switching)
|
- name: mounts + volumes (switching)
|
||||||
@ -307,12 +307,12 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
mounts:
|
mounts:
|
||||||
- source: /tmp
|
- source: /tmp
|
||||||
target: /tmp
|
target: /tmp
|
||||||
type: bind
|
type: bind
|
||||||
read_only: false
|
read_only: false
|
||||||
volumes:
|
volumes:
|
||||||
- /:/whatever:ro
|
- /:/whatever:ro
|
||||||
force_kill: true
|
force_kill: true
|
||||||
register: mounts_volumes_3
|
register: mounts_volumes_3
|
||||||
|
|
||||||
@ -323,12 +323,12 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
mounts:
|
mounts:
|
||||||
- source: /tmp
|
- source: /tmp
|
||||||
target: /tmp
|
target: /tmp
|
||||||
type: bind
|
type: bind
|
||||||
read_only: false
|
read_only: false
|
||||||
volumes:
|
volumes:
|
||||||
- /tmp:/tmp
|
- /tmp:/tmp
|
||||||
force_kill: true
|
force_kill: true
|
||||||
register: mounts_volumes_4
|
register: mounts_volumes_4
|
||||||
ignore_errors: true
|
ignore_errors: true
|
||||||
@ -342,11 +342,11 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- mounts_volumes_1 is changed
|
- mounts_volumes_1 is changed
|
||||||
- mounts_volumes_2 is not changed
|
- mounts_volumes_2 is not changed
|
||||||
- mounts_volumes_3 is changed
|
- mounts_volumes_3 is changed
|
||||||
- mounts_volumes_4 is failed
|
- mounts_volumes_4 is failed
|
||||||
- "'The mount point \"/tmp\" appears both in the volumes and mounts option' in mounts_volumes_4.msg"
|
- "'The mount point \"/tmp\" appears both in the volumes and mounts option' in mounts_volumes_4.msg"
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
## volume_driver ###################################################
|
## volume_driver ###################################################
|
||||||
@ -389,9 +389,9 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- volume_driver_1 is changed
|
- volume_driver_1 is changed
|
||||||
- volume_driver_2 is not changed
|
- volume_driver_2 is not changed
|
||||||
- volume_driver_3 is changed
|
- volume_driver_3 is changed
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
## volumes #########################################################
|
## volumes #########################################################
|
||||||
@ -404,9 +404,9 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
volumes:
|
volumes:
|
||||||
- "/tmp:/tmp"
|
- "/tmp:/tmp"
|
||||||
- "/:/whatever:rw,z"
|
- "/:/whatever:rw,z"
|
||||||
- "/anon:rw"
|
- "/anon:rw"
|
||||||
register: volumes_1
|
register: volumes_1
|
||||||
|
|
||||||
- name: volumes (idempotency)
|
- name: volumes (idempotency)
|
||||||
@ -416,9 +416,9 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
volumes:
|
volumes:
|
||||||
- "/:/whatever:rw,z"
|
- "/:/whatever:rw,z"
|
||||||
- "/tmp:/tmp"
|
- "/tmp:/tmp"
|
||||||
- "/anon:rw"
|
- "/anon:rw"
|
||||||
register: volumes_2
|
register: volumes_2
|
||||||
|
|
||||||
- name: volumes (less volumes)
|
- name: volumes (less volumes)
|
||||||
@ -428,7 +428,7 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
volumes:
|
volumes:
|
||||||
- "/tmp:/tmp"
|
- "/tmp:/tmp"
|
||||||
register: volumes_3
|
register: volumes_3
|
||||||
|
|
||||||
- name: volumes (more volumes)
|
- name: volumes (more volumes)
|
||||||
@ -438,8 +438,8 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
volumes:
|
volumes:
|
||||||
- "/tmp:/tmp"
|
- "/tmp:/tmp"
|
||||||
- "/tmp:/somewhereelse:ro,Z"
|
- "/tmp:/somewhereelse:ro,Z"
|
||||||
force_kill: true
|
force_kill: true
|
||||||
register: volumes_4
|
register: volumes_4
|
||||||
|
|
||||||
@ -450,8 +450,8 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
volumes:
|
volumes:
|
||||||
- "/tmp:/tmp"
|
- "/tmp:/tmp"
|
||||||
- "/tmp:/somewhereelse:ro"
|
- "/tmp:/somewhereelse:ro"
|
||||||
force_kill: true
|
force_kill: true
|
||||||
register: volumes_5
|
register: volumes_5
|
||||||
|
|
||||||
@ -462,8 +462,8 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
volumes:
|
volumes:
|
||||||
- "/etc:/tmp"
|
- "/etc:/tmp"
|
||||||
- "/home:/tmp:ro"
|
- "/home:/tmp:ro"
|
||||||
force_kill: true
|
force_kill: true
|
||||||
register: volumes_6
|
register: volumes_6
|
||||||
ignore_errors: true
|
ignore_errors: true
|
||||||
@ -477,16 +477,16 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- volumes_1 is changed
|
- volumes_1 is changed
|
||||||
- volumes_1.container.Config.Volumes | length == 1
|
- volumes_1.container.Config.Volumes | length == 1
|
||||||
- volumes_1.container.Config.Volumes['/anon:rw'] | length == 0
|
- volumes_1.container.Config.Volumes['/anon:rw'] | length == 0
|
||||||
- volumes_2 is not changed
|
- volumes_2 is not changed
|
||||||
- volumes_3 is not changed
|
- volumes_3 is not changed
|
||||||
- volumes_4 is changed
|
- volumes_4 is changed
|
||||||
- not volumes_4.container.Config.Volumes
|
- not volumes_4.container.Config.Volumes
|
||||||
- volumes_5 is changed
|
- volumes_5 is changed
|
||||||
- volumes_6 is failed
|
- volumes_6 is failed
|
||||||
- "'The mount point \"/tmp\" appears twice in the volumes option' in volumes_6.msg"
|
- "'The mount point \"/tmp\" appears twice in the volumes option' in volumes_6.msg"
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
## volumes_from ####################################################
|
## volumes_from ####################################################
|
||||||
@ -499,10 +499,10 @@
|
|||||||
name: "{{ container_name }}"
|
name: "{{ container_name }}"
|
||||||
state: started
|
state: started
|
||||||
volumes:
|
volumes:
|
||||||
- "{{ '/tmp:/tmp' if container_name == cname_h1 else '/:/whatever:ro' }}"
|
- "{{ '/tmp:/tmp' if container_name == cname_h1 else '/:/whatever:ro' }}"
|
||||||
loop:
|
loop:
|
||||||
- "{{ cname_h1 }}"
|
- "{{ cname_h1 }}"
|
||||||
- "{{ cname_h2 }}"
|
- "{{ cname_h2 }}"
|
||||||
loop_control:
|
loop_control:
|
||||||
loop_var: container_name
|
loop_var: container_name
|
||||||
|
|
||||||
@ -540,18 +540,18 @@
|
|||||||
state: absent
|
state: absent
|
||||||
force_kill: true
|
force_kill: true
|
||||||
loop:
|
loop:
|
||||||
- "{{ cname }}"
|
- "{{ cname }}"
|
||||||
- "{{ cname_h1 }}"
|
- "{{ cname_h1 }}"
|
||||||
- "{{ cname_h2 }}"
|
- "{{ cname_h2 }}"
|
||||||
loop_control:
|
loop_control:
|
||||||
loop_var: container_name
|
loop_var: container_name
|
||||||
diff: false
|
diff: false
|
||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- volumes_from_1 is changed
|
- volumes_from_1 is changed
|
||||||
- volumes_from_2 is not changed
|
- volumes_from_2 is not changed
|
||||||
- volumes_from_3 is changed
|
- volumes_from_3 is changed
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
####################################################################
|
####################################################################
|
||||||
|
|||||||
@ -20,8 +20,8 @@
|
|||||||
name: "{{ network_name }}"
|
name: "{{ network_name }}"
|
||||||
state: present
|
state: present
|
||||||
loop:
|
loop:
|
||||||
- "{{ nname_1 }}"
|
- "{{ nname_1 }}"
|
||||||
- "{{ nname_2 }}"
|
- "{{ nname_2 }}"
|
||||||
loop_control:
|
loop_control:
|
||||||
loop_var: network_name
|
loop_var: network_name
|
||||||
|
|
||||||
@ -126,24 +126,24 @@
|
|||||||
state: absent
|
state: absent
|
||||||
force_kill: true
|
force_kill: true
|
||||||
loop:
|
loop:
|
||||||
- "{{ cname }}"
|
- "{{ cname }}"
|
||||||
- "{{ cname_h1 }}"
|
- "{{ cname_h1 }}"
|
||||||
loop_control:
|
loop_control:
|
||||||
loop_var: container_name
|
loop_var: container_name
|
||||||
diff: false
|
diff: false
|
||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- network_mode_1 is changed
|
- network_mode_1 is changed
|
||||||
- network_mode_1.container.HostConfig.NetworkMode == 'host'
|
- network_mode_1.container.HostConfig.NetworkMode == 'host'
|
||||||
- network_mode_2 is not changed
|
- network_mode_2 is not changed
|
||||||
- network_mode_2.container.HostConfig.NetworkMode == 'host'
|
- network_mode_2.container.HostConfig.NetworkMode == 'host'
|
||||||
- network_mode_3 is changed
|
- network_mode_3 is changed
|
||||||
- network_mode_3.container.HostConfig.NetworkMode == 'none'
|
- network_mode_3.container.HostConfig.NetworkMode == 'none'
|
||||||
- network_mode_4 is changed
|
- network_mode_4 is changed
|
||||||
- network_mode_4.container.HostConfig.NetworkMode == ('container:' ~ cname_h1_id.container.Id)
|
- network_mode_4.container.HostConfig.NetworkMode == ('container:' ~ cname_h1_id.container.Id)
|
||||||
- network_mode_5 is not changed
|
- network_mode_5 is not changed
|
||||||
- network_mode_5.container.HostConfig.NetworkMode == ('container:' ~ cname_h1_id.container.Id)
|
- network_mode_5.container.HostConfig.NetworkMode == ('container:' ~ cname_h1_id.container.Id)
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
## networks, purge_networks for networks_cli_compatible=no #########
|
## networks, purge_networks for networks_cli_compatible=no #########
|
||||||
@ -156,8 +156,8 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
networks:
|
networks:
|
||||||
- name: "{{ nname_1 }}"
|
- name: "{{ nname_1 }}"
|
||||||
- name: "{{ nname_2 }}"
|
- name: "{{ nname_2 }}"
|
||||||
networks_cli_compatible: false
|
networks_cli_compatible: false
|
||||||
register: networks_1
|
register: networks_1
|
||||||
|
|
||||||
@ -168,8 +168,8 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
networks:
|
networks:
|
||||||
- name: "{{ nname_1 }}"
|
- name: "{{ nname_1 }}"
|
||||||
- name: "{{ nname_2 }}"
|
- name: "{{ nname_2 }}"
|
||||||
networks_cli_compatible: false
|
networks_cli_compatible: false
|
||||||
register: networks_2
|
register: networks_2
|
||||||
|
|
||||||
@ -182,8 +182,8 @@
|
|||||||
comparisons:
|
comparisons:
|
||||||
networks: strict
|
networks: strict
|
||||||
networks:
|
networks:
|
||||||
- name: bridge
|
- name: bridge
|
||||||
- name: "{{ nname_1 }}"
|
- name: "{{ nname_1 }}"
|
||||||
networks_cli_compatible: false
|
networks_cli_compatible: false
|
||||||
force_kill: true
|
force_kill: true
|
||||||
register: networks_3
|
register: networks_3
|
||||||
@ -197,8 +197,8 @@
|
|||||||
comparisons:
|
comparisons:
|
||||||
networks: strict
|
networks: strict
|
||||||
networks:
|
networks:
|
||||||
- name: "{{ nname_1 }}"
|
- name: "{{ nname_1 }}"
|
||||||
- name: bridge
|
- name: bridge
|
||||||
networks_cli_compatible: false
|
networks_cli_compatible: false
|
||||||
register: networks_4
|
register: networks_4
|
||||||
|
|
||||||
@ -209,7 +209,7 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
networks:
|
networks:
|
||||||
- name: bridge
|
- name: bridge
|
||||||
networks_cli_compatible: false
|
networks_cli_compatible: false
|
||||||
register: networks_5
|
register: networks_5
|
||||||
|
|
||||||
@ -222,7 +222,7 @@
|
|||||||
comparisons:
|
comparisons:
|
||||||
networks: strict
|
networks: strict
|
||||||
networks:
|
networks:
|
||||||
- name: bridge
|
- name: bridge
|
||||||
networks_cli_compatible: false
|
networks_cli_compatible: false
|
||||||
force_kill: true
|
force_kill: true
|
||||||
register: networks_6
|
register: networks_6
|
||||||
@ -236,8 +236,8 @@
|
|||||||
comparisons:
|
comparisons:
|
||||||
networks: strict
|
networks: strict
|
||||||
networks:
|
networks:
|
||||||
- name: bridge
|
- name: bridge
|
||||||
- name: "{{ nname_2 }}"
|
- name: "{{ nname_2 }}"
|
||||||
networks_cli_compatible: false
|
networks_cli_compatible: false
|
||||||
force_kill: true
|
force_kill: true
|
||||||
register: networks_7
|
register: networks_7
|
||||||
@ -251,42 +251,42 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
# networks_1 has networks default, 'bridge', nname_1
|
# networks_1 has networks default, 'bridge', nname_1
|
||||||
- networks_1 is changed
|
- networks_1 is changed
|
||||||
- networks_1.container.NetworkSettings.Networks | length == 3
|
- networks_1.container.NetworkSettings.Networks | length == 3
|
||||||
- nname_1 in networks_1.container.NetworkSettings.Networks
|
- nname_1 in networks_1.container.NetworkSettings.Networks
|
||||||
- nname_2 in networks_1.container.NetworkSettings.Networks
|
- nname_2 in networks_1.container.NetworkSettings.Networks
|
||||||
- "'default' in networks_1.container.NetworkSettings.Networks or 'bridge' in networks_1.container.NetworkSettings.Networks"
|
- "'default' in networks_1.container.NetworkSettings.Networks or 'bridge' in networks_1.container.NetworkSettings.Networks"
|
||||||
# networks_2 has networks default, 'bridge', nname_1
|
# networks_2 has networks default, 'bridge', nname_1
|
||||||
- networks_2 is not changed
|
- networks_2 is not changed
|
||||||
- networks_2.container.NetworkSettings.Networks | length == 3
|
- networks_2.container.NetworkSettings.Networks | length == 3
|
||||||
- nname_1 in networks_2.container.NetworkSettings.Networks
|
- nname_1 in networks_2.container.NetworkSettings.Networks
|
||||||
- nname_2 in networks_1.container.NetworkSettings.Networks
|
- nname_2 in networks_1.container.NetworkSettings.Networks
|
||||||
- "'default' in networks_1.container.NetworkSettings.Networks or 'bridge' in networks_1.container.NetworkSettings.Networks"
|
- "'default' in networks_1.container.NetworkSettings.Networks or 'bridge' in networks_1.container.NetworkSettings.Networks"
|
||||||
# networks_3 has networks 'bridge', nname_1
|
# networks_3 has networks 'bridge', nname_1
|
||||||
- networks_3 is changed
|
- networks_3 is changed
|
||||||
- networks_3.container.NetworkSettings.Networks | length == 2
|
- networks_3.container.NetworkSettings.Networks | length == 2
|
||||||
- nname_1 in networks_3.container.NetworkSettings.Networks
|
- nname_1 in networks_3.container.NetworkSettings.Networks
|
||||||
- "'default' in networks_3.container.NetworkSettings.Networks or 'bridge' in networks_3.container.NetworkSettings.Networks"
|
- "'default' in networks_3.container.NetworkSettings.Networks or 'bridge' in networks_3.container.NetworkSettings.Networks"
|
||||||
# networks_4 has networks 'bridge', nname_1
|
# networks_4 has networks 'bridge', nname_1
|
||||||
- networks_4 is not changed
|
- networks_4 is not changed
|
||||||
- networks_4.container.NetworkSettings.Networks | length == 2
|
- networks_4.container.NetworkSettings.Networks | length == 2
|
||||||
- nname_1 in networks_4.container.NetworkSettings.Networks
|
- nname_1 in networks_4.container.NetworkSettings.Networks
|
||||||
- "'default' in networks_4.container.NetworkSettings.Networks or 'bridge' in networks_4.container.NetworkSettings.Networks"
|
- "'default' in networks_4.container.NetworkSettings.Networks or 'bridge' in networks_4.container.NetworkSettings.Networks"
|
||||||
# networks_5 has networks 'bridge', nname_1
|
# networks_5 has networks 'bridge', nname_1
|
||||||
- networks_5 is not changed
|
- networks_5 is not changed
|
||||||
- networks_5.container.NetworkSettings.Networks | length == 2
|
- networks_5.container.NetworkSettings.Networks | length == 2
|
||||||
- nname_1 in networks_5.container.NetworkSettings.Networks
|
- nname_1 in networks_5.container.NetworkSettings.Networks
|
||||||
- "'default' in networks_5.container.NetworkSettings.Networks or 'bridge' in networks_5.container.NetworkSettings.Networks"
|
- "'default' in networks_5.container.NetworkSettings.Networks or 'bridge' in networks_5.container.NetworkSettings.Networks"
|
||||||
# networks_6 has networks 'bridge'
|
# networks_6 has networks 'bridge'
|
||||||
- networks_6 is changed
|
- networks_6 is changed
|
||||||
- networks_6.container.NetworkSettings.Networks | length == 1
|
- networks_6.container.NetworkSettings.Networks | length == 1
|
||||||
- "'default' in networks_6.container.NetworkSettings.Networks or 'bridge' in networks_6.container.NetworkSettings.Networks"
|
- "'default' in networks_6.container.NetworkSettings.Networks or 'bridge' in networks_6.container.NetworkSettings.Networks"
|
||||||
# networks_7 has networks 'bridge', nname_2
|
# networks_7 has networks 'bridge', nname_2
|
||||||
- networks_7 is changed
|
- networks_7 is changed
|
||||||
- networks_7.container.NetworkSettings.Networks | length == 2
|
- networks_7.container.NetworkSettings.Networks | length == 2
|
||||||
- nname_2 in networks_7.container.NetworkSettings.Networks
|
- nname_2 in networks_7.container.NetworkSettings.Networks
|
||||||
- "'default' in networks_7.container.NetworkSettings.Networks or 'bridge' in networks_7.container.NetworkSettings.Networks"
|
- "'default' in networks_7.container.NetworkSettings.Networks or 'bridge' in networks_7.container.NetworkSettings.Networks"
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
## networks for networks_cli_compatible=yes ########################
|
## networks for networks_cli_compatible=yes ########################
|
||||||
@ -299,11 +299,11 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
networks:
|
networks:
|
||||||
- name: "{{ nname_1 }}"
|
- name: "{{ nname_1 }}"
|
||||||
aliases:
|
aliases:
|
||||||
- alias1
|
- alias1
|
||||||
- alias2
|
- alias2
|
||||||
- name: "{{ nname_2 }}"
|
- name: "{{ nname_2 }}"
|
||||||
networks_cli_compatible: true
|
networks_cli_compatible: true
|
||||||
register: networks_1
|
register: networks_1
|
||||||
|
|
||||||
@ -314,8 +314,8 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
networks:
|
networks:
|
||||||
- name: "{{ nname_1 }}"
|
- name: "{{ nname_1 }}"
|
||||||
- name: "{{ nname_2 }}"
|
- name: "{{ nname_2 }}"
|
||||||
networks_cli_compatible: true
|
networks_cli_compatible: true
|
||||||
register: networks_2
|
register: networks_2
|
||||||
|
|
||||||
@ -409,38 +409,38 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
# networks_1 has networks nname_1, nname_2
|
# networks_1 has networks nname_1, nname_2
|
||||||
- networks_1 is changed
|
- networks_1 is changed
|
||||||
- networks_1.container.NetworkSettings.Networks | length == 2
|
- networks_1.container.NetworkSettings.Networks | length == 2
|
||||||
- nname_1 in networks_1.container.NetworkSettings.Networks
|
- nname_1 in networks_1.container.NetworkSettings.Networks
|
||||||
- nname_2 in networks_1.container.NetworkSettings.Networks
|
- nname_2 in networks_1.container.NetworkSettings.Networks
|
||||||
# networks_2 has networks nname_1, nname_2
|
# networks_2 has networks nname_1, nname_2
|
||||||
- networks_2 is not changed
|
- networks_2 is not changed
|
||||||
- networks_2.container.NetworkSettings.Networks | length == 2
|
- networks_2.container.NetworkSettings.Networks | length == 2
|
||||||
- nname_1 in networks_2.container.NetworkSettings.Networks
|
- nname_1 in networks_2.container.NetworkSettings.Networks
|
||||||
- nname_2 in networks_1.container.NetworkSettings.Networks
|
- nname_2 in networks_1.container.NetworkSettings.Networks
|
||||||
# networks_3 has networks 'bridge'
|
# networks_3 has networks 'bridge'
|
||||||
- networks_3 is changed
|
- networks_3 is changed
|
||||||
- networks_3.container.NetworkSettings.Networks | length == 1
|
- networks_3.container.NetworkSettings.Networks | length == 1
|
||||||
- "'default' in networks_3.container.NetworkSettings.Networks or 'bridge' in networks_3.container.NetworkSettings.Networks"
|
- "'default' in networks_3.container.NetworkSettings.Networks or 'bridge' in networks_3.container.NetworkSettings.Networks"
|
||||||
# networks_4 has networks 'bridge'
|
# networks_4 has networks 'bridge'
|
||||||
- networks_4 is not changed
|
- networks_4 is not changed
|
||||||
- networks_4.container.NetworkSettings.Networks | length == 1
|
- networks_4.container.NetworkSettings.Networks | length == 1
|
||||||
- "'default' in networks_4.container.NetworkSettings.Networks or 'bridge' in networks_4.container.NetworkSettings.Networks"
|
- "'default' in networks_4.container.NetworkSettings.Networks or 'bridge' in networks_4.container.NetworkSettings.Networks"
|
||||||
# networks_5 has no networks
|
# networks_5 has no networks
|
||||||
- networks_5 is changed
|
- networks_5 is changed
|
||||||
- networks_5.container.NetworkSettings.Networks | length == 0
|
- networks_5.container.NetworkSettings.Networks | length == 0
|
||||||
# networks_6 has networks 'bridge'
|
# networks_6 has networks 'bridge'
|
||||||
- networks_6 is changed
|
- networks_6 is changed
|
||||||
- networks_6.container.NetworkSettings.Networks | length == 1
|
- networks_6.container.NetworkSettings.Networks | length == 1
|
||||||
- "'default' in networks_6.container.NetworkSettings.Networks or 'bridge' in networks_6.container.NetworkSettings.Networks"
|
- "'default' in networks_6.container.NetworkSettings.Networks or 'bridge' in networks_6.container.NetworkSettings.Networks"
|
||||||
# networks_7 has networks 'bridge'
|
# networks_7 has networks 'bridge'
|
||||||
- networks_7 is not changed
|
- networks_7 is not changed
|
||||||
- networks_7.container.NetworkSettings.Networks | length == 1
|
- networks_7.container.NetworkSettings.Networks | length == 1
|
||||||
- "'default' in networks_7.container.NetworkSettings.Networks or 'bridge' in networks_7.container.NetworkSettings.Networks"
|
- "'default' in networks_7.container.NetworkSettings.Networks or 'bridge' in networks_7.container.NetworkSettings.Networks"
|
||||||
# networks_8 has no networks
|
# networks_8 has no networks
|
||||||
- networks_8 is changed
|
- networks_8 is changed
|
||||||
- networks_8.container.NetworkSettings.Networks | length == 0
|
- networks_8.container.NetworkSettings.Networks | length == 0
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
## networks with comparisons #######################################
|
## networks with comparisons #######################################
|
||||||
@ -453,7 +453,7 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
networks:
|
networks:
|
||||||
- name: "{{ nname_1 }}"
|
- name: "{{ nname_1 }}"
|
||||||
networks_cli_compatible: true
|
networks_cli_compatible: true
|
||||||
register: networks_1
|
register: networks_1
|
||||||
|
|
||||||
@ -464,7 +464,7 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
networks:
|
networks:
|
||||||
- name: "{{ nname_2 }}"
|
- name: "{{ nname_2 }}"
|
||||||
networks_cli_compatible: true
|
networks_cli_compatible: true
|
||||||
comparisons:
|
comparisons:
|
||||||
network_mode: ignore # otherwise we'd have to set network_mode to nname_1
|
network_mode: ignore # otherwise we'd have to set network_mode to nname_1
|
||||||
@ -502,7 +502,7 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
networks:
|
networks:
|
||||||
- name: "{{ nname_2 }}"
|
- name: "{{ nname_2 }}"
|
||||||
networks_cli_compatible: true
|
networks_cli_compatible: true
|
||||||
comparisons:
|
comparisons:
|
||||||
network_mode: ignore # otherwise we'd have to set network_mode to nname_1
|
network_mode: ignore # otherwise we'd have to set network_mode to nname_1
|
||||||
@ -517,7 +517,7 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
networks:
|
networks:
|
||||||
- name: "{{ nname_2 }}"
|
- name: "{{ nname_2 }}"
|
||||||
networks_cli_compatible: true
|
networks_cli_compatible: true
|
||||||
comparisons:
|
comparisons:
|
||||||
networks: strict
|
networks: strict
|
||||||
@ -546,34 +546,34 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
# networks_1 has networks nname_1
|
# networks_1 has networks nname_1
|
||||||
- networks_1 is changed
|
- networks_1 is changed
|
||||||
- networks_1.container.NetworkSettings.Networks | length == 1
|
- networks_1.container.NetworkSettings.Networks | length == 1
|
||||||
- nname_1 in networks_1.container.NetworkSettings.Networks
|
- nname_1 in networks_1.container.NetworkSettings.Networks
|
||||||
# networks_2 has networks nname_1
|
# networks_2 has networks nname_1
|
||||||
- networks_2 is not changed
|
- networks_2 is not changed
|
||||||
- networks_2.container.NetworkSettings.Networks | length == 1
|
- networks_2.container.NetworkSettings.Networks | length == 1
|
||||||
- nname_1 in networks_2.container.NetworkSettings.Networks
|
- nname_1 in networks_2.container.NetworkSettings.Networks
|
||||||
# networks_3 has networks nname_1
|
# networks_3 has networks nname_1
|
||||||
- networks_3 is not changed
|
- networks_3 is not changed
|
||||||
- networks_3.container.NetworkSettings.Networks | length == 1
|
- networks_3.container.NetworkSettings.Networks | length == 1
|
||||||
- nname_1 in networks_3.container.NetworkSettings.Networks
|
- nname_1 in networks_3.container.NetworkSettings.Networks
|
||||||
# networks_4 has networks nname_1
|
# networks_4 has networks nname_1
|
||||||
- networks_4 is not changed
|
- networks_4 is not changed
|
||||||
- networks_4.container.NetworkSettings.Networks | length == 1
|
- networks_4.container.NetworkSettings.Networks | length == 1
|
||||||
- nname_1 in networks_4.container.NetworkSettings.Networks
|
- nname_1 in networks_4.container.NetworkSettings.Networks
|
||||||
# networks_5 has networks nname_1, nname_2
|
# networks_5 has networks nname_1, nname_2
|
||||||
- networks_5 is changed
|
- networks_5 is changed
|
||||||
- networks_5.container.NetworkSettings.Networks | length == 2
|
- networks_5.container.NetworkSettings.Networks | length == 2
|
||||||
- nname_1 in networks_5.container.NetworkSettings.Networks
|
- nname_1 in networks_5.container.NetworkSettings.Networks
|
||||||
- nname_2 in networks_5.container.NetworkSettings.Networks
|
- nname_2 in networks_5.container.NetworkSettings.Networks
|
||||||
# networks_6 has networks nname_2
|
# networks_6 has networks nname_2
|
||||||
- networks_6 is changed
|
- networks_6 is changed
|
||||||
- networks_6.container.NetworkSettings.Networks | length == 1
|
- networks_6.container.NetworkSettings.Networks | length == 1
|
||||||
- nname_2 in networks_6.container.NetworkSettings.Networks
|
- nname_2 in networks_6.container.NetworkSettings.Networks
|
||||||
# networks_7 has no networks
|
# networks_7 has no networks
|
||||||
- networks_7 is changed
|
- networks_7 is changed
|
||||||
- networks_7.container.NetworkSettings.Networks | length == 0
|
- networks_7.container.NetworkSettings.Networks | length == 0
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
## networks with IP address ########################################
|
## networks with IP address ########################################
|
||||||
@ -586,9 +586,9 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: stopped
|
state: stopped
|
||||||
networks:
|
networks:
|
||||||
- name: "{{ nname_3 }}"
|
- name: "{{ nname_3 }}"
|
||||||
ipv4_address: "{{ nname_3_ipv4_2 }}"
|
ipv4_address: "{{ nname_3_ipv4_2 }}"
|
||||||
ipv6_address: "{{ nname_3_ipv6_2 }}"
|
ipv6_address: "{{ nname_3_ipv6_2 }}"
|
||||||
networks_cli_compatible: true
|
networks_cli_compatible: true
|
||||||
register: networks_1
|
register: networks_1
|
||||||
|
|
||||||
@ -599,9 +599,9 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: stopped
|
state: stopped
|
||||||
networks:
|
networks:
|
||||||
- name: "{{ nname_3 }}"
|
- name: "{{ nname_3 }}"
|
||||||
ipv4_address: "{{ nname_3_ipv4_2 }}"
|
ipv4_address: "{{ nname_3_ipv4_2 }}"
|
||||||
ipv6_address: "{{ nname_3_ipv6_2 }}"
|
ipv6_address: "{{ nname_3_ipv6_2 }}"
|
||||||
networks_cli_compatible: true
|
networks_cli_compatible: true
|
||||||
register: networks_2
|
register: networks_2
|
||||||
|
|
||||||
@ -612,9 +612,9 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: stopped
|
state: stopped
|
||||||
networks:
|
networks:
|
||||||
- name: "{{ nname_3 }}"
|
- name: "{{ nname_3 }}"
|
||||||
ipv4_address: "{{ nname_3_ipv4_3 }}"
|
ipv4_address: "{{ nname_3_ipv4_3 }}"
|
||||||
ipv6_address: "{{ nname_3_ipv6_2 }}"
|
ipv6_address: "{{ nname_3_ipv6_2 }}"
|
||||||
networks_cli_compatible: true
|
networks_cli_compatible: true
|
||||||
register: networks_3
|
register: networks_3
|
||||||
|
|
||||||
@ -625,9 +625,9 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: stopped
|
state: stopped
|
||||||
networks:
|
networks:
|
||||||
- name: "{{ nname_3 }}"
|
- name: "{{ nname_3 }}"
|
||||||
ipv4_address: "{{ nname_3_ipv4_3 }}"
|
ipv4_address: "{{ nname_3_ipv4_3 }}"
|
||||||
ipv6_address: "{{ nname_3_ipv6_3 }}"
|
ipv6_address: "{{ nname_3_ipv6_3 }}"
|
||||||
networks_cli_compatible: true
|
networks_cli_compatible: true
|
||||||
register: networks_4
|
register: networks_4
|
||||||
|
|
||||||
@ -644,9 +644,9 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
networks:
|
networks:
|
||||||
- name: "{{ nname_3 }}"
|
- name: "{{ nname_3 }}"
|
||||||
ipv4_address: "{{ nname_3_ipv4_4 }}"
|
ipv4_address: "{{ nname_3_ipv4_4 }}"
|
||||||
ipv6_address: "{{ nname_3_ipv6_3 }}"
|
ipv6_address: "{{ nname_3_ipv6_3 }}"
|
||||||
networks_cli_compatible: true
|
networks_cli_compatible: true
|
||||||
force_kill: true
|
force_kill: true
|
||||||
register: networks_6
|
register: networks_6
|
||||||
@ -658,9 +658,9 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
networks:
|
networks:
|
||||||
- name: "{{ nname_3 }}"
|
- name: "{{ nname_3 }}"
|
||||||
ipv4_address: "{{ nname_3_ipv4_4 }}"
|
ipv4_address: "{{ nname_3_ipv4_4 }}"
|
||||||
ipv6_address: "{{ nname_3_ipv6_4 }}"
|
ipv6_address: "{{ nname_3_ipv6_4 }}"
|
||||||
networks_cli_compatible: true
|
networks_cli_compatible: true
|
||||||
force_kill: true
|
force_kill: true
|
||||||
register: networks_7
|
register: networks_7
|
||||||
@ -672,9 +672,9 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
networks:
|
networks:
|
||||||
- name: "{{ nname_3 }}"
|
- name: "{{ nname_3 }}"
|
||||||
ipv4_address: "{{ nname_3_ipv4_4 }}"
|
ipv4_address: "{{ nname_3_ipv4_4 }}"
|
||||||
ipv6_address: "{{ nname_3_ipv6_4 }}"
|
ipv6_address: "{{ nname_3_ipv6_4 }}"
|
||||||
networks_cli_compatible: true
|
networks_cli_compatible: true
|
||||||
register: networks_8
|
register: networks_8
|
||||||
|
|
||||||
@ -687,46 +687,46 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- networks_1 is changed
|
- networks_1 is changed
|
||||||
- networks_1.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv4Address == nname_3_ipv4_2
|
- networks_1.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv4Address == nname_3_ipv4_2
|
||||||
- networks_1.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv6Address | normalize_ipaddr == nname_3_ipv6_2 | normalize_ipaddr
|
- networks_1.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv6Address | normalize_ipaddr == nname_3_ipv6_2 | normalize_ipaddr
|
||||||
- networks_1.container.NetworkSettings.Networks[nname_3].IPAddress == ""
|
- networks_1.container.NetworkSettings.Networks[nname_3].IPAddress == ""
|
||||||
- networks_1.container.NetworkSettings.Networks[nname_3].GlobalIPv6Address == ""
|
- networks_1.container.NetworkSettings.Networks[nname_3].GlobalIPv6Address == ""
|
||||||
- networks_2 is not changed
|
- networks_2 is not changed
|
||||||
- networks_2.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv4Address == nname_3_ipv4_2
|
- networks_2.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv4Address == nname_3_ipv4_2
|
||||||
- networks_2.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv6Address | normalize_ipaddr == nname_3_ipv6_2 | normalize_ipaddr
|
- networks_2.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv6Address | normalize_ipaddr == nname_3_ipv6_2 | normalize_ipaddr
|
||||||
- networks_2.container.NetworkSettings.Networks[nname_3].IPAddress == ""
|
- networks_2.container.NetworkSettings.Networks[nname_3].IPAddress == ""
|
||||||
- networks_2.container.NetworkSettings.Networks[nname_3].GlobalIPv6Address == ""
|
- networks_2.container.NetworkSettings.Networks[nname_3].GlobalIPv6Address == ""
|
||||||
- networks_3 is changed
|
- networks_3 is changed
|
||||||
- networks_3.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv4Address == nname_3_ipv4_3
|
- networks_3.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv4Address == nname_3_ipv4_3
|
||||||
- networks_3.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv6Address | normalize_ipaddr == nname_3_ipv6_2 | normalize_ipaddr
|
- networks_3.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv6Address | normalize_ipaddr == nname_3_ipv6_2 | normalize_ipaddr
|
||||||
- networks_3.container.NetworkSettings.Networks[nname_3].IPAddress == ""
|
- networks_3.container.NetworkSettings.Networks[nname_3].IPAddress == ""
|
||||||
- networks_3.container.NetworkSettings.Networks[nname_3].GlobalIPv6Address == ""
|
- networks_3.container.NetworkSettings.Networks[nname_3].GlobalIPv6Address == ""
|
||||||
- networks_4 is changed
|
- networks_4 is changed
|
||||||
- networks_4.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv4Address == nname_3_ipv4_3
|
- networks_4.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv4Address == nname_3_ipv4_3
|
||||||
- networks_4.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv6Address | normalize_ipaddr == nname_3_ipv6_3 | normalize_ipaddr
|
- networks_4.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv6Address | normalize_ipaddr == nname_3_ipv6_3 | normalize_ipaddr
|
||||||
- networks_4.container.NetworkSettings.Networks[nname_3].IPAddress == ""
|
- networks_4.container.NetworkSettings.Networks[nname_3].IPAddress == ""
|
||||||
- networks_4.container.NetworkSettings.Networks[nname_3].GlobalIPv6Address == ""
|
- networks_4.container.NetworkSettings.Networks[nname_3].GlobalIPv6Address == ""
|
||||||
- networks_5 is changed
|
- networks_5 is changed
|
||||||
- networks_5.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv4Address == nname_3_ipv4_3
|
- networks_5.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv4Address == nname_3_ipv4_3
|
||||||
- networks_5.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv6Address | normalize_ipaddr == nname_3_ipv6_3 | normalize_ipaddr
|
- networks_5.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv6Address | normalize_ipaddr == nname_3_ipv6_3 | normalize_ipaddr
|
||||||
- networks_5.container.NetworkSettings.Networks[nname_3].IPAddress == nname_3_ipv4_3
|
- networks_5.container.NetworkSettings.Networks[nname_3].IPAddress == nname_3_ipv4_3
|
||||||
- networks_5.container.NetworkSettings.Networks[nname_3].GlobalIPv6Address | normalize_ipaddr == nname_3_ipv6_3 | normalize_ipaddr
|
- networks_5.container.NetworkSettings.Networks[nname_3].GlobalIPv6Address | normalize_ipaddr == nname_3_ipv6_3 | normalize_ipaddr
|
||||||
- networks_6 is changed
|
- networks_6 is changed
|
||||||
- networks_6.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv4Address == nname_3_ipv4_4
|
- networks_6.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv4Address == nname_3_ipv4_4
|
||||||
- networks_6.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv6Address | normalize_ipaddr == nname_3_ipv6_3 | normalize_ipaddr
|
- networks_6.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv6Address | normalize_ipaddr == nname_3_ipv6_3 | normalize_ipaddr
|
||||||
- networks_6.container.NetworkSettings.Networks[nname_3].IPAddress == nname_3_ipv4_4
|
- networks_6.container.NetworkSettings.Networks[nname_3].IPAddress == nname_3_ipv4_4
|
||||||
- networks_6.container.NetworkSettings.Networks[nname_3].GlobalIPv6Address | normalize_ipaddr == nname_3_ipv6_3 | normalize_ipaddr
|
- networks_6.container.NetworkSettings.Networks[nname_3].GlobalIPv6Address | normalize_ipaddr == nname_3_ipv6_3 | normalize_ipaddr
|
||||||
- networks_7 is changed
|
- networks_7 is changed
|
||||||
- networks_7.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv4Address == nname_3_ipv4_4
|
- networks_7.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv4Address == nname_3_ipv4_4
|
||||||
- networks_7.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv6Address | normalize_ipaddr == nname_3_ipv6_4 | normalize_ipaddr
|
- networks_7.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv6Address | normalize_ipaddr == nname_3_ipv6_4 | normalize_ipaddr
|
||||||
- networks_7.container.NetworkSettings.Networks[nname_3].IPAddress == nname_3_ipv4_4
|
- networks_7.container.NetworkSettings.Networks[nname_3].IPAddress == nname_3_ipv4_4
|
||||||
- networks_7.container.NetworkSettings.Networks[nname_3].GlobalIPv6Address | normalize_ipaddr == nname_3_ipv6_4 | normalize_ipaddr
|
- networks_7.container.NetworkSettings.Networks[nname_3].GlobalIPv6Address | normalize_ipaddr == nname_3_ipv6_4 | normalize_ipaddr
|
||||||
- networks_8 is not changed
|
- networks_8 is not changed
|
||||||
- networks_8.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv4Address == nname_3_ipv4_4
|
- networks_8.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv4Address == nname_3_ipv4_4
|
||||||
- networks_8.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv6Address | normalize_ipaddr == nname_3_ipv6_4 | normalize_ipaddr
|
- networks_8.container.NetworkSettings.Networks[nname_3].IPAMConfig.IPv6Address | normalize_ipaddr == nname_3_ipv6_4 | normalize_ipaddr
|
||||||
- networks_8.container.NetworkSettings.Networks[nname_3].IPAddress == nname_3_ipv4_4
|
- networks_8.container.NetworkSettings.Networks[nname_3].IPAddress == nname_3_ipv4_4
|
||||||
- networks_8.container.NetworkSettings.Networks[nname_3].GlobalIPv6Address | normalize_ipaddr == nname_3_ipv6_4 | normalize_ipaddr
|
- networks_8.container.NetworkSettings.Networks[nname_3].GlobalIPv6Address | normalize_ipaddr == nname_3_ipv6_4 | normalize_ipaddr
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
####################################################################
|
####################################################################
|
||||||
@ -738,8 +738,8 @@
|
|||||||
state: absent
|
state: absent
|
||||||
force: true
|
force: true
|
||||||
loop:
|
loop:
|
||||||
- "{{ nname_1 }}"
|
- "{{ nname_1 }}"
|
||||||
- "{{ nname_2 }}"
|
- "{{ nname_2 }}"
|
||||||
- "{{ nname_3 }}"
|
- "{{ nname_3 }}"
|
||||||
loop_control:
|
loop_control:
|
||||||
loop_var: network_name
|
loop_var: network_name
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -22,7 +22,7 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
published_ports:
|
published_ports:
|
||||||
- "[::1:2000:3000"
|
- "[::1:2000:3000"
|
||||||
register: published_ports_1
|
register: published_ports_1
|
||||||
ignore_errors: true
|
ignore_errors: true
|
||||||
|
|
||||||
@ -33,7 +33,7 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
published_ports:
|
published_ports:
|
||||||
- "::1:2000:3000"
|
- "::1:2000:3000"
|
||||||
register: published_ports_2
|
register: published_ports_2
|
||||||
ignore_errors: true
|
ignore_errors: true
|
||||||
|
|
||||||
@ -44,7 +44,7 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
published_ports:
|
published_ports:
|
||||||
- "foo:2000:3000"
|
- "foo:2000:3000"
|
||||||
register: published_ports_3
|
register: published_ports_3
|
||||||
ignore_errors: true
|
ignore_errors: true
|
||||||
|
|
||||||
@ -68,11 +68,11 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
exposed_ports:
|
exposed_ports:
|
||||||
- "9001"
|
- "9001"
|
||||||
- "9010-9050"
|
- "9010-9050"
|
||||||
published_ports:
|
published_ports:
|
||||||
- "9001:9001"
|
- "9001:9001"
|
||||||
- "9010-9050:9010-9050"
|
- "9010-9050:9010-9050"
|
||||||
force_kill: true
|
force_kill: true
|
||||||
register: published_ports_1
|
register: published_ports_1
|
||||||
|
|
||||||
@ -83,11 +83,11 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
exposed_ports:
|
exposed_ports:
|
||||||
- "9001"
|
- "9001"
|
||||||
- "9010-9050"
|
- "9010-9050"
|
||||||
published_ports:
|
published_ports:
|
||||||
- "9001:9001"
|
- "9001:9001"
|
||||||
- "9010-9050:9010-9050"
|
- "9010-9050:9010-9050"
|
||||||
force_kill: true
|
force_kill: true
|
||||||
register: published_ports_2
|
register: published_ports_2
|
||||||
|
|
||||||
@ -98,11 +98,11 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
exposed_ports:
|
exposed_ports:
|
||||||
- "9001"
|
- "9001"
|
||||||
- "9010-9050"
|
- "9010-9050"
|
||||||
published_ports:
|
published_ports:
|
||||||
- "9001:9001"
|
- "9001:9001"
|
||||||
- "9020-9060:9020-9060"
|
- "9020-9060:9020-9060"
|
||||||
force_kill: true
|
force_kill: true
|
||||||
register: published_ports_3
|
register: published_ports_3
|
||||||
|
|
||||||
@ -115,9 +115,9 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- published_ports_1 is changed
|
- published_ports_1 is changed
|
||||||
- published_ports_2 is not changed
|
- published_ports_2 is not changed
|
||||||
- published_ports_3 is changed
|
- published_ports_3 is changed
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
## published_ports: one-element container port range ###############
|
## published_ports: one-element container port range ###############
|
||||||
@ -130,7 +130,7 @@
|
|||||||
name: "{{ item }}"
|
name: "{{ item }}"
|
||||||
state: started
|
state: started
|
||||||
published_ports:
|
published_ports:
|
||||||
- "9010-9050:9010"
|
- "9010-9050:9010"
|
||||||
force_kill: true
|
force_kill: true
|
||||||
loop:
|
loop:
|
||||||
- '{{ cname }}'
|
- '{{ cname }}'
|
||||||
@ -144,7 +144,7 @@
|
|||||||
name: "{{ item }}"
|
name: "{{ item }}"
|
||||||
state: started
|
state: started
|
||||||
published_ports:
|
published_ports:
|
||||||
- "9010-9050:9010"
|
- "9010-9050:9010"
|
||||||
force_kill: true
|
force_kill: true
|
||||||
loop:
|
loop:
|
||||||
- '{{ cname }}'
|
- '{{ cname }}'
|
||||||
@ -158,7 +158,7 @@
|
|||||||
name: "{{ item }}"
|
name: "{{ item }}"
|
||||||
state: started
|
state: started
|
||||||
published_ports:
|
published_ports:
|
||||||
- "9010-9051:9010"
|
- "9010-9051:9010"
|
||||||
force_kill: true
|
force_kill: true
|
||||||
loop:
|
loop:
|
||||||
- '{{ cname }}'
|
- '{{ cname }}'
|
||||||
@ -177,9 +177,9 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- published_ports_1 is changed
|
- published_ports_1 is changed
|
||||||
- published_ports_2 is not changed
|
- published_ports_2 is not changed
|
||||||
- published_ports_3 is changed
|
- published_ports_3 is changed
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
## published_ports: IPv6 addresses #################################
|
## published_ports: IPv6 addresses #################################
|
||||||
@ -194,7 +194,7 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
published_ports:
|
published_ports:
|
||||||
- "[::1]:9001:9001"
|
- "[::1]:9001:9001"
|
||||||
force_kill: true
|
force_kill: true
|
||||||
register: published_ports_1
|
register: published_ports_1
|
||||||
|
|
||||||
@ -205,7 +205,7 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
published_ports:
|
published_ports:
|
||||||
- "[::1]:9001:9001"
|
- "[::1]:9001:9001"
|
||||||
force_kill: true
|
force_kill: true
|
||||||
register: published_ports_2
|
register: published_ports_2
|
||||||
|
|
||||||
@ -216,7 +216,7 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
published_ports:
|
published_ports:
|
||||||
- "127.0.0.1:9001:9001"
|
- "127.0.0.1:9001:9001"
|
||||||
force_kill: true
|
force_kill: true
|
||||||
register: published_ports_3
|
register: published_ports_3
|
||||||
|
|
||||||
@ -227,7 +227,7 @@
|
|||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: started
|
state: started
|
||||||
published_ports:
|
published_ports:
|
||||||
- "localhost:9001:9001"
|
- "localhost:9001:9001"
|
||||||
force_kill: true
|
force_kill: true
|
||||||
register: published_ports_4
|
register: published_ports_4
|
||||||
ignore_errors: true
|
ignore_errors: true
|
||||||
@ -241,10 +241,10 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- published_ports_1 is changed
|
- published_ports_1 is changed
|
||||||
- published_ports_2 is not changed
|
- published_ports_2 is not changed
|
||||||
- published_ports_3 is changed
|
- published_ports_3 is changed
|
||||||
- published_ports_4 is failed
|
- published_ports_4 is failed
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
## publish_all_ports ###############################################
|
## publish_all_ports ###############################################
|
||||||
|
|||||||
@ -29,10 +29,10 @@
|
|||||||
# before the container is stopped (see
|
# before the container is stopped (see
|
||||||
# https://github.com/ansible/ansible/issues/45486).
|
# https://github.com/ansible/ansible/issues/45486).
|
||||||
networks:
|
networks:
|
||||||
- name: "nonexistant-network-{{ (2**32) | random }}"
|
- name: "nonexistant-network-{{ (2**32) | random }}"
|
||||||
published_ports:
|
published_ports:
|
||||||
- '1:2'
|
- '1:2'
|
||||||
- '3'
|
- '3'
|
||||||
links:
|
links:
|
||||||
- "nonexistant-container-{{ (2**32) | random }}:test"
|
- "nonexistant-container-{{ (2**32) | random }}:test"
|
||||||
state: absent
|
state: absent
|
||||||
|
|||||||
@ -50,10 +50,10 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- create_1 is changed
|
- create_1 is changed
|
||||||
- create_2 is changed
|
- create_2 is changed
|
||||||
- create_3 is not changed
|
- create_3 is not changed
|
||||||
- create_4 is not changed
|
- create_4 is not changed
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
## Starting (after creation) #######################################
|
## Starting (after creation) #######################################
|
||||||
@ -87,10 +87,10 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- start_1 is changed
|
- start_1 is changed
|
||||||
- start_2 is changed
|
- start_2 is changed
|
||||||
- start_3 is not changed
|
- start_3 is not changed
|
||||||
- start_4 is not changed
|
- start_4 is not changed
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
## Present check for running container #############################
|
## Present check for running container #############################
|
||||||
@ -115,8 +115,8 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- present_check_1 is not changed
|
- present_check_1 is not changed
|
||||||
- present_check_2 is not changed
|
- present_check_2 is not changed
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
## Starting (from scratch) #########################################
|
## Starting (from scratch) #########################################
|
||||||
@ -168,10 +168,10 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- start_scratch_1 is changed
|
- start_scratch_1 is changed
|
||||||
- start_scratch_2 is changed
|
- start_scratch_2 is changed
|
||||||
- start_scratch_3 is not changed
|
- start_scratch_3 is not changed
|
||||||
- start_scratch_4 is not changed
|
- start_scratch_4 is not changed
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
## Recreating ######################################################
|
## Recreating ######################################################
|
||||||
@ -253,16 +253,16 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- recreate_2 is changed
|
- recreate_2 is changed
|
||||||
- recreate_3 is changed
|
- recreate_3 is changed
|
||||||
- recreate_4 is changed
|
- recreate_4 is changed
|
||||||
- recreate_5 is changed
|
- recreate_5 is changed
|
||||||
- recreate_6 is changed
|
- recreate_6 is changed
|
||||||
- recreate_1.container.Id == recreate_2.container.Id
|
- recreate_1.container.Id == recreate_2.container.Id
|
||||||
- recreate_1.container.Id != recreate_3.container.Id
|
- recreate_1.container.Id != recreate_3.container.Id
|
||||||
- recreate_3.container.Id == recreate_4.container.Id
|
- recreate_3.container.Id == recreate_4.container.Id
|
||||||
- recreate_4.container.Id == recreate_5.container.Id
|
- recreate_4.container.Id == recreate_5.container.Id
|
||||||
- recreate_4.container.Id != recreate_6.container.Id
|
- recreate_4.container.Id != recreate_6.container.Id
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
## Restarting ######################################################
|
## Restarting ######################################################
|
||||||
@ -276,7 +276,7 @@
|
|||||||
state: started
|
state: started
|
||||||
stop_timeout: 1
|
stop_timeout: 1
|
||||||
volumes:
|
volumes:
|
||||||
- /tmp/tmp
|
- /tmp/tmp
|
||||||
register: restart_1
|
register: restart_1
|
||||||
|
|
||||||
- name: Restarting (restart, check mode)
|
- name: Restarting (restart, check mode)
|
||||||
@ -310,7 +310,7 @@
|
|||||||
state: started
|
state: started
|
||||||
stop_timeout: 1
|
stop_timeout: 1
|
||||||
volumes:
|
volumes:
|
||||||
- /tmp/tmp
|
- /tmp/tmp
|
||||||
register: restart_4
|
register: restart_4
|
||||||
|
|
||||||
- name: cleanup
|
- name: cleanup
|
||||||
@ -322,11 +322,11 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- restart_1 is changed
|
- restart_1 is changed
|
||||||
- restart_2 is changed
|
- restart_2 is changed
|
||||||
- restart_3 is changed
|
- restart_3 is changed
|
||||||
- restart_1.container.Id == restart_3.container.Id
|
- restart_1.container.Id == restart_3.container.Id
|
||||||
- restart_4 is not changed
|
- restart_4 is not changed
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
## Stopping ########################################################
|
## Stopping ########################################################
|
||||||
@ -368,10 +368,10 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- stop_1 is changed
|
- stop_1 is changed
|
||||||
- stop_2 is changed
|
- stop_2 is changed
|
||||||
- stop_3 is not changed
|
- stop_3 is not changed
|
||||||
- stop_4 is not changed
|
- stop_4 is not changed
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
## Removing ########################################################
|
## Removing ########################################################
|
||||||
@ -405,10 +405,10 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- remove_1 is changed
|
- remove_1 is changed
|
||||||
- remove_2 is changed
|
- remove_2 is changed
|
||||||
- remove_3 is not changed
|
- remove_3 is not changed
|
||||||
- remove_4 is not changed
|
- remove_4 is not changed
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
## Removing (from running) #########################################
|
## Removing (from running) #########################################
|
||||||
@ -453,7 +453,7 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- remove_from_running_1 is changed
|
- remove_from_running_1 is changed
|
||||||
- remove_from_running_2 is changed
|
- remove_from_running_2 is changed
|
||||||
- remove_from_running_3 is not changed
|
- remove_from_running_3 is not changed
|
||||||
- remove_from_running_4 is not changed
|
- remove_from_running_4 is not changed
|
||||||
|
|||||||
@ -131,91 +131,91 @@
|
|||||||
- name: Check general things
|
- name: Check general things
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- create is changed
|
- create is changed
|
||||||
- update is changed
|
- update is changed
|
||||||
- update2 is changed
|
- update2 is changed
|
||||||
- recreate is changed
|
- recreate is changed
|
||||||
|
|
||||||
# Make sure the container was *not* recreated when it should not be
|
# Make sure the container was *not* recreated when it should not be
|
||||||
- create.container.Id == update.container.Id
|
- create.container.Id == update.container.Id
|
||||||
- create.container.Id == update2.container.Id
|
- create.container.Id == update2.container.Id
|
||||||
|
|
||||||
# Make sure that the container was recreated when it should be
|
# Make sure that the container was recreated when it should be
|
||||||
- create.container.Id != recreate.container.Id
|
- create.container.Id != recreate.container.Id
|
||||||
|
|
||||||
- name: Check diff for first update
|
- name: Check diff for first update
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
# blkio_weight sometimes cannot be set, then we end up with 0 instead of the value we had
|
# blkio_weight sometimes cannot be set, then we end up with 0 instead of the value we had
|
||||||
- >-
|
- >-
|
||||||
not has_blkio_weight or update.diff.before.blkio_weight == 123 or ('Docker warning: Your kernel does not support Block I/O weight or the cgroup is not mounted. Weight discarded.' in (create.warnings | default([])))
|
not has_blkio_weight or update.diff.before.blkio_weight == 123 or ('Docker warning: Your kernel does not support Block I/O weight or the cgroup is not mounted. Weight discarded.' in (create.warnings | default([])))
|
||||||
- not has_blkio_weight or update.diff.after.blkio_weight == 234
|
- not has_blkio_weight or update.diff.after.blkio_weight == 234
|
||||||
- update.diff.before.cpu_period == 90000
|
- update.diff.before.cpu_period == 90000
|
||||||
- update.diff.after.cpu_period == 50000
|
- update.diff.after.cpu_period == 50000
|
||||||
- update.diff.before.cpu_quota == 150000
|
- update.diff.before.cpu_quota == 150000
|
||||||
- update.diff.after.cpu_quota == 50000
|
- update.diff.after.cpu_quota == 50000
|
||||||
- update.diff.before.cpu_shares == 900
|
- update.diff.before.cpu_shares == 900
|
||||||
- update.diff.after.cpu_shares == 1100
|
- update.diff.after.cpu_shares == 1100
|
||||||
- update.diff.before.memory == 67108864
|
- update.diff.before.memory == 67108864
|
||||||
- update.diff.after.memory == 50331648
|
- update.diff.after.memory == 50331648
|
||||||
- update.diff.before.memory_reservation == 67108864
|
- update.diff.before.memory_reservation == 67108864
|
||||||
- update.diff.after.memory_reservation == 50331648
|
- update.diff.after.memory_reservation == 50331648
|
||||||
- >-
|
- >-
|
||||||
(update.diff.before.memory_swap | default(0)) == 67108864 or ('Docker warning: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.' in (create.warnings | default([])))
|
(update.diff.before.memory_swap | default(0)) == 67108864 or ('Docker warning: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.' in (create.warnings | default([])))
|
||||||
- >-
|
- >-
|
||||||
(update.diff.after.memory_swap | default(0)) == -1 or ('Docker warning: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.' in (create.warnings | default([])))
|
(update.diff.after.memory_swap | default(0)) == -1 or ('Docker warning: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.' in (create.warnings | default([])))
|
||||||
- "'restart_policy' not in update.diff.before"
|
- "'restart_policy' not in update.diff.before"
|
||||||
- update.diff.before.restart_retries == 5
|
- update.diff.before.restart_retries == 5
|
||||||
- update.diff.after.restart_retries == 2
|
- update.diff.after.restart_retries == 2
|
||||||
|
|
||||||
- name: Check diff for second update
|
- name: Check diff for second update
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- >-
|
- >-
|
||||||
not has_blkio_weight or update2.diff.before.blkio_weight == 234 or ('Docker warning: Your kernel does not support Block I/O weight or the cgroup is not mounted. Weight discarded.' in (create.warnings | default([])))
|
not has_blkio_weight or update2.diff.before.blkio_weight == 234 or ('Docker warning: Your kernel does not support Block I/O weight or the cgroup is not mounted. Weight discarded.' in (create.warnings | default([])))
|
||||||
- not has_blkio_weight or update2.diff.after.blkio_weight == 135
|
- not has_blkio_weight or update2.diff.after.blkio_weight == 135
|
||||||
- update2.diff.before.cpu_period == 50000
|
- update2.diff.before.cpu_period == 50000
|
||||||
- update2.diff.after.cpu_period == 30000
|
- update2.diff.after.cpu_period == 30000
|
||||||
- update2.diff.before.cpu_quota == 50000
|
- update2.diff.before.cpu_quota == 50000
|
||||||
- update2.diff.after.cpu_quota == 40000
|
- update2.diff.after.cpu_quota == 40000
|
||||||
- update2.diff.before.cpu_shares == 1100
|
- update2.diff.before.cpu_shares == 1100
|
||||||
- update2.diff.after.cpu_shares == 1000
|
- update2.diff.after.cpu_shares == 1000
|
||||||
- update2.diff.before.memory == 50331648
|
- update2.diff.before.memory == 50331648
|
||||||
- update2.diff.after.memory == 33554432
|
- update2.diff.after.memory == 33554432
|
||||||
- update2.diff.before.memory_reservation == 50331648
|
- update2.diff.before.memory_reservation == 50331648
|
||||||
- update2.diff.after.memory_reservation == 31457280
|
- update2.diff.after.memory_reservation == 31457280
|
||||||
- >-
|
- >-
|
||||||
(update2.diff.before.memory_swap | default(0)) == -1 or ('Docker warning: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.' in (create.warnings | default([])))
|
(update2.diff.before.memory_swap | default(0)) == -1 or ('Docker warning: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.' in (create.warnings | default([])))
|
||||||
- >-
|
- >-
|
||||||
(update2.diff.after.memory_swap | default(0)) == 134217728 or ('Docker warning: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.' in (create.warnings | default([])))
|
(update2.diff.after.memory_swap | default(0)) == 134217728 or ('Docker warning: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.' in (create.warnings | default([])))
|
||||||
- update2.diff.before.restart_policy == 'on-failure'
|
- update2.diff.before.restart_policy == 'on-failure'
|
||||||
- update2.diff.after.restart_policy == 'always'
|
- update2.diff.after.restart_policy == 'always'
|
||||||
- update2.diff.before.restart_retries == 2
|
- update2.diff.before.restart_retries == 2
|
||||||
- update2.diff.after.restart_retries == 0
|
- update2.diff.after.restart_retries == 0
|
||||||
|
|
||||||
- name: Check diff for recreation
|
- name: Check diff for recreation
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- >-
|
- >-
|
||||||
not has_blkio_weight or recreate.diff.before.blkio_weight == 135 or ('Docker warning: Your kernel does not support Block I/O weight or the cgroup is not mounted. Weight discarded.' in (create.warnings | default([])))
|
not has_blkio_weight or recreate.diff.before.blkio_weight == 135 or ('Docker warning: Your kernel does not support Block I/O weight or the cgroup is not mounted. Weight discarded.' in (create.warnings | default([])))
|
||||||
- not has_blkio_weight or recreate.diff.after.blkio_weight == 234
|
- not has_blkio_weight or recreate.diff.after.blkio_weight == 234
|
||||||
- recreate.diff.before.cpu_period == 30000
|
- recreate.diff.before.cpu_period == 30000
|
||||||
- recreate.diff.after.cpu_period == 50000
|
- recreate.diff.after.cpu_period == 50000
|
||||||
- recreate.diff.before.cpu_quota == 40000
|
- recreate.diff.before.cpu_quota == 40000
|
||||||
- recreate.diff.after.cpu_quota == 50000
|
- recreate.diff.after.cpu_quota == 50000
|
||||||
- recreate.diff.before.cpu_shares == 1000
|
- recreate.diff.before.cpu_shares == 1000
|
||||||
- recreate.diff.after.cpu_shares == 1100
|
- recreate.diff.after.cpu_shares == 1100
|
||||||
- recreate.diff.before.memory == 33554432
|
- recreate.diff.before.memory == 33554432
|
||||||
- recreate.diff.after.memory == 50331648
|
- recreate.diff.after.memory == 50331648
|
||||||
- recreate.diff.before.memory_reservation == 31457280
|
- recreate.diff.before.memory_reservation == 31457280
|
||||||
- recreate.diff.after.memory_reservation == 50331648
|
- recreate.diff.after.memory_reservation == 50331648
|
||||||
- >-
|
- >-
|
||||||
(recreate.diff.before.memory_swap | default(0)) == 134217728 or ('Docker warning: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.' in (create.warnings | default([])))
|
(recreate.diff.before.memory_swap | default(0)) == 134217728 or ('Docker warning: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.' in (create.warnings | default([])))
|
||||||
- >-
|
- >-
|
||||||
(recreate.diff.after.memory_swap | default(0)) == -1 or ('Docker warning: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.' in (create.warnings | default([])))
|
(recreate.diff.after.memory_swap | default(0)) == -1 or ('Docker warning: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.' in (create.warnings | default([])))
|
||||||
- recreate.diff.before.restart_policy == 'always'
|
- recreate.diff.before.restart_policy == 'always'
|
||||||
- recreate.diff.after.restart_policy == 'on-failure'
|
- recreate.diff.after.restart_policy == 'on-failure'
|
||||||
- recreate.diff.before.restart_retries == 0
|
- recreate.diff.before.restart_retries == 0
|
||||||
- recreate.diff.after.restart_retries == 2
|
- recreate.diff.after.restart_retries == 2
|
||||||
- recreate.diff.before.command == ['/bin/sh', '-c', 'sleep 10m']
|
- recreate.diff.before.command == ['/bin/sh', '-c', 'sleep 10m']
|
||||||
- recreate.diff.after.command == ['/bin/sh', '-c', 'sleep 20m']
|
- recreate.diff.after.command == ['/bin/sh', '-c', 'sleep 20m']
|
||||||
|
|||||||
@ -9,218 +9,218 @@
|
|||||||
####################################################################
|
####################################################################
|
||||||
|
|
||||||
- block:
|
- block:
|
||||||
- name: Create random container name
|
- name: Create random container name
|
||||||
set_fact:
|
set_fact:
|
||||||
cname: "{{ 'ansible-docker-test-%0x' % ((2**32) | random) }}"
|
cname: "{{ 'ansible-docker-test-%0x' % ((2**32) | random) }}"
|
||||||
|
|
||||||
- name: Make sure container is not there
|
- name: Make sure container is not there
|
||||||
docker_container:
|
docker_container:
|
||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: absent
|
state: absent
|
||||||
force_kill: true
|
force_kill: true
|
||||||
|
|
||||||
- name: Execute in a non-present container
|
- name: Execute in a non-present container
|
||||||
docker_container_exec:
|
docker_container_exec:
|
||||||
container: "{{ cname }}"
|
container: "{{ cname }}"
|
||||||
command: "/bin/bash -c 'ls -a'"
|
command: "/bin/bash -c 'ls -a'"
|
||||||
register: result
|
register: result
|
||||||
ignore_errors: true
|
ignore_errors: true
|
||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- result is failed
|
- result is failed
|
||||||
- "'Could not find container' in result.msg"
|
- "'Could not find container' in result.msg"
|
||||||
|
|
||||||
- name: Make sure container exists
|
- name: Make sure container exists
|
||||||
docker_container:
|
docker_container:
|
||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
image: "{{ docker_test_image_alpine }}"
|
image: "{{ docker_test_image_alpine }}"
|
||||||
command: '/bin/sh -c "sleep 10m"'
|
command: '/bin/sh -c "sleep 10m"'
|
||||||
state: started
|
state: started
|
||||||
force_kill: true
|
force_kill: true
|
||||||
|
|
||||||
- name: Execute in a present container (command)
|
- name: Execute in a present container (command)
|
||||||
docker_container_exec:
|
docker_container_exec:
|
||||||
container: "{{ cname }}"
|
container: "{{ cname }}"
|
||||||
command: "/bin/sh -c 'ls -a'"
|
command: "/bin/sh -c 'ls -a'"
|
||||||
register: result_cmd
|
register: result_cmd
|
||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- result_cmd.rc == 0
|
- result_cmd.rc == 0
|
||||||
- "'stdout' in result_cmd"
|
- "'stdout' in result_cmd"
|
||||||
- "'stdout_lines' in result_cmd"
|
- "'stdout_lines' in result_cmd"
|
||||||
- "'stderr' in result_cmd"
|
- "'stderr' in result_cmd"
|
||||||
- "'stderr_lines' in result_cmd"
|
- "'stderr_lines' in result_cmd"
|
||||||
|
|
||||||
- name: Execute in a present container (argv)
|
- name: Execute in a present container (argv)
|
||||||
docker_container_exec:
|
docker_container_exec:
|
||||||
container: "{{ cname }}"
|
container: "{{ cname }}"
|
||||||
argv:
|
argv:
|
||||||
- /bin/sh
|
- /bin/sh
|
||||||
- '-c'
|
- '-c'
|
||||||
- ls -a
|
- ls -a
|
||||||
register: result_argv
|
register: result_argv
|
||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- result_argv.rc == 0
|
- result_argv.rc == 0
|
||||||
- "'stdout' in result_argv"
|
- "'stdout' in result_argv"
|
||||||
- "'stdout_lines' in result_argv"
|
- "'stdout_lines' in result_argv"
|
||||||
- "'stderr' in result_argv"
|
- "'stderr' in result_argv"
|
||||||
- "'stderr_lines' in result_argv"
|
- "'stderr_lines' in result_argv"
|
||||||
- result_cmd.stdout == result_argv.stdout
|
- result_cmd.stdout == result_argv.stdout
|
||||||
|
|
||||||
- name: Execute in a present container (cat without stdin)
|
- name: Execute in a present container (cat without stdin)
|
||||||
docker_container_exec:
|
docker_container_exec:
|
||||||
container: "{{ cname }}"
|
container: "{{ cname }}"
|
||||||
argv:
|
argv:
|
||||||
- /bin/sh
|
- /bin/sh
|
||||||
- '-c'
|
- '-c'
|
||||||
- cat
|
- cat
|
||||||
register: result
|
register: result
|
||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- result.rc == 0
|
- result.rc == 0
|
||||||
- result.stdout == ''
|
- result.stdout == ''
|
||||||
- result.stdout_lines == []
|
- result.stdout_lines == []
|
||||||
- result.stderr == ''
|
- result.stderr == ''
|
||||||
- result.stderr_lines == []
|
- result.stderr_lines == []
|
||||||
|
|
||||||
- name: Execute in a present container (cat with stdin)
|
- name: Execute in a present container (cat with stdin)
|
||||||
docker_container_exec:
|
docker_container_exec:
|
||||||
container: "{{ cname }}"
|
container: "{{ cname }}"
|
||||||
argv:
|
argv:
|
||||||
- /bin/sh
|
- /bin/sh
|
||||||
- '-c'
|
- '-c'
|
||||||
- cat
|
- cat
|
||||||
stdin: Hello world!
|
stdin: Hello world!
|
||||||
strip_empty_ends: false
|
strip_empty_ends: false
|
||||||
register: result
|
register: result
|
||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- result.rc == 0
|
- result.rc == 0
|
||||||
- result.stdout == 'Hello world!\n'
|
- result.stdout == 'Hello world!\n'
|
||||||
- result.stdout_lines == ['Hello world!']
|
- result.stdout_lines == ['Hello world!']
|
||||||
- result.stderr == ''
|
- result.stderr == ''
|
||||||
- result.stderr_lines == []
|
- result.stderr_lines == []
|
||||||
|
|
||||||
- name: Execute in a present container (cat with stdin, no newline)
|
- name: Execute in a present container (cat with stdin, no newline)
|
||||||
docker_container_exec:
|
docker_container_exec:
|
||||||
container: "{{ cname }}"
|
container: "{{ cname }}"
|
||||||
argv:
|
argv:
|
||||||
- /bin/sh
|
- /bin/sh
|
||||||
- '-c'
|
- '-c'
|
||||||
- cat
|
- cat
|
||||||
stdin: Hello world!
|
stdin: Hello world!
|
||||||
stdin_add_newline: false
|
stdin_add_newline: false
|
||||||
strip_empty_ends: false
|
strip_empty_ends: false
|
||||||
register: result
|
register: result
|
||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- result.rc == 0
|
- result.rc == 0
|
||||||
- result.stdout == 'Hello world!'
|
- result.stdout == 'Hello world!'
|
||||||
- result.stdout_lines == ['Hello world!']
|
- result.stdout_lines == ['Hello world!']
|
||||||
- result.stderr == ''
|
- result.stderr == ''
|
||||||
- result.stderr_lines == []
|
- result.stderr_lines == []
|
||||||
|
|
||||||
- name: Execute in a present container (cat with stdin, newline but stripping)
|
- name: Execute in a present container (cat with stdin, newline but stripping)
|
||||||
docker_container_exec:
|
docker_container_exec:
|
||||||
container: "{{ cname }}"
|
container: "{{ cname }}"
|
||||||
argv:
|
argv:
|
||||||
- /bin/sh
|
- /bin/sh
|
||||||
- '-c'
|
- '-c'
|
||||||
- cat
|
- cat
|
||||||
stdin: Hello world!
|
stdin: Hello world!
|
||||||
stdin_add_newline: true
|
stdin_add_newline: true
|
||||||
strip_empty_ends: true
|
strip_empty_ends: true
|
||||||
register: result
|
register: result
|
||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- result.rc == 0
|
- result.rc == 0
|
||||||
- result.stdout == 'Hello world!'
|
- result.stdout == 'Hello world!'
|
||||||
- result.stdout_lines == ['Hello world!']
|
- result.stdout_lines == ['Hello world!']
|
||||||
- result.stderr == ''
|
- result.stderr == ''
|
||||||
- result.stderr_lines == []
|
- result.stderr_lines == []
|
||||||
|
|
||||||
- name: Prepare long string
|
- name: Prepare long string
|
||||||
set_fact:
|
set_fact:
|
||||||
very_long_string: "{{ 'something long ' * 10000 }}"
|
very_long_string: "{{ 'something long ' * 10000 }}"
|
||||||
very_long_string2: "{{ 'something else ' * 5000 }}"
|
very_long_string2: "{{ 'something else ' * 5000 }}"
|
||||||
|
|
||||||
- name: Execute in a present container (long stdin)
|
- name: Execute in a present container (long stdin)
|
||||||
docker_container_exec:
|
docker_container_exec:
|
||||||
container: "{{ cname }}"
|
container: "{{ cname }}"
|
||||||
argv:
|
argv:
|
||||||
- /bin/sh
|
- /bin/sh
|
||||||
- '-c'
|
- '-c'
|
||||||
- cat
|
- cat
|
||||||
stdin: |-
|
stdin: |-
|
||||||
{{ very_long_string }}
|
{{ very_long_string }}
|
||||||
{{ very_long_string2 }}
|
{{ very_long_string2 }}
|
||||||
register: result
|
register: result
|
||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- result is changed
|
- result is changed
|
||||||
- result.rc == 0
|
- result.rc == 0
|
||||||
- result.stdout == (very_long_string ~ '\n' ~ very_long_string2)
|
- result.stdout == (very_long_string ~ '\n' ~ very_long_string2)
|
||||||
- result.stdout_lines == [very_long_string, very_long_string2]
|
- result.stdout_lines == [very_long_string, very_long_string2]
|
||||||
- result.stderr == ''
|
- result.stderr == ''
|
||||||
- result.stderr_lines == []
|
- result.stderr_lines == []
|
||||||
- "'exec_id' not in result"
|
- "'exec_id' not in result"
|
||||||
|
|
||||||
- name: Execute in a present container (detached)
|
- name: Execute in a present container (detached)
|
||||||
docker_container_exec:
|
docker_container_exec:
|
||||||
container: "{{ cname }}"
|
container: "{{ cname }}"
|
||||||
argv:
|
argv:
|
||||||
- /bin/sh
|
- /bin/sh
|
||||||
- '-c'
|
- '-c'
|
||||||
- sleep 1m
|
- sleep 1m
|
||||||
detach: true
|
detach: true
|
||||||
register: result
|
register: result
|
||||||
|
|
||||||
- debug: var=result
|
- debug: var=result
|
||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- result is changed
|
- result is changed
|
||||||
- "'rc' not in result"
|
- "'rc' not in result"
|
||||||
- "'stdout' not in result"
|
- "'stdout' not in result"
|
||||||
- "'stderr' not in result"
|
- "'stderr' not in result"
|
||||||
- result.exec_id is string
|
- result.exec_id is string
|
||||||
|
|
||||||
- name: Execute in a present container (environment variable)
|
- name: Execute in a present container (environment variable)
|
||||||
docker_container_exec:
|
docker_container_exec:
|
||||||
container: "{{ cname }}"
|
container: "{{ cname }}"
|
||||||
argv:
|
argv:
|
||||||
- /bin/sh
|
- /bin/sh
|
||||||
- '-c'
|
- '-c'
|
||||||
- 'echo "$FOO" ; echo $FOO > /dev/stderr'
|
- 'echo "$FOO" ; echo $FOO > /dev/stderr'
|
||||||
env:
|
env:
|
||||||
FOO: |-
|
FOO: |-
|
||||||
bar
|
bar
|
||||||
baz
|
baz
|
||||||
register: result
|
register: result
|
||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- result.rc == 0
|
- result.rc == 0
|
||||||
- result.stdout == 'bar\nbaz'
|
- result.stdout == 'bar\nbaz'
|
||||||
- result.stdout_lines == ['bar', 'baz']
|
- result.stdout_lines == ['bar', 'baz']
|
||||||
- result.stderr == 'bar baz'
|
- result.stderr == 'bar baz'
|
||||||
- result.stderr_lines == ['bar baz']
|
- result.stderr_lines == ['bar baz']
|
||||||
|
|
||||||
always:
|
always:
|
||||||
- name: Cleanup
|
- name: Cleanup
|
||||||
docker_container:
|
docker_container:
|
||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: absent
|
state: absent
|
||||||
force_kill: true
|
force_kill: true
|
||||||
|
|
||||||
when: docker_api_version is version('1.25', '>=')
|
when: docker_api_version is version('1.25', '>=')
|
||||||
|
|
||||||
|
|||||||
@ -9,74 +9,74 @@
|
|||||||
####################################################################
|
####################################################################
|
||||||
|
|
||||||
- block:
|
- block:
|
||||||
- name: Create random container name
|
- name: Create random container name
|
||||||
set_fact:
|
set_fact:
|
||||||
cname: "{{ 'ansible-docker-test-%0x' % ((2**32) | random) }}"
|
cname: "{{ 'ansible-docker-test-%0x' % ((2**32) | random) }}"
|
||||||
|
|
||||||
- name: Make sure container is not there
|
- name: Make sure container is not there
|
||||||
docker_container:
|
docker_container:
|
||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: absent
|
state: absent
|
||||||
force_kill: true
|
force_kill: true
|
||||||
|
|
||||||
- name: Inspect a non-present container
|
- name: Inspect a non-present container
|
||||||
docker_container_info:
|
docker_container_info:
|
||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
register: result
|
register: result
|
||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- "not result.exists"
|
- "not result.exists"
|
||||||
- "'container' in result"
|
- "'container' in result"
|
||||||
- "result.container is none"
|
- "result.container is none"
|
||||||
|
|
||||||
- name: Make sure container exists
|
- name: Make sure container exists
|
||||||
docker_container:
|
docker_container:
|
||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
image: "{{ docker_test_image_alpine }}"
|
image: "{{ docker_test_image_alpine }}"
|
||||||
command: '/bin/sh -c "sleep 10m"'
|
command: '/bin/sh -c "sleep 10m"'
|
||||||
state: started
|
state: started
|
||||||
force_kill: true
|
force_kill: true
|
||||||
|
|
||||||
- name: Inspect a present container
|
- name: Inspect a present container
|
||||||
docker_container_info:
|
docker_container_info:
|
||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
register: result
|
register: result
|
||||||
- name: Dump docker_container_info result
|
- name: Dump docker_container_info result
|
||||||
debug: var=result
|
debug: var=result
|
||||||
|
|
||||||
- name: "Comparison: use 'docker inspect'"
|
- name: "Comparison: use 'docker inspect'"
|
||||||
command: docker inspect "{{ cname }}"
|
command: docker inspect "{{ cname }}"
|
||||||
register: docker_inspect
|
register: docker_inspect
|
||||||
ignore_errors: true
|
ignore_errors: true
|
||||||
- block:
|
- block:
|
||||||
- set_fact:
|
- set_fact:
|
||||||
docker_inspect_result: "{{ docker_inspect.stdout | from_json }}"
|
docker_inspect_result: "{{ docker_inspect.stdout | from_json }}"
|
||||||
- name: Dump docker inspect result
|
- name: Dump docker inspect result
|
||||||
debug: var=docker_inspect_result
|
debug: var=docker_inspect_result
|
||||||
when: docker_inspect is not failed
|
when: docker_inspect is not failed
|
||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- result.exists
|
- result.exists
|
||||||
- "'container' in result"
|
- "'container' in result"
|
||||||
- "result.container is truthy"
|
- "result.container is truthy"
|
||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- "result.container == docker_inspect_result[0]"
|
- "result.container == docker_inspect_result[0]"
|
||||||
when: docker_inspect is not failed
|
when: docker_inspect is not failed
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- "'is too new. Maximum supported API version is' in docker_inspect.stderr"
|
- "'is too new. Maximum supported API version is' in docker_inspect.stderr"
|
||||||
when: docker_inspect is failed
|
when: docker_inspect is failed
|
||||||
|
|
||||||
always:
|
always:
|
||||||
- name: Cleanup
|
- name: Cleanup
|
||||||
docker_container:
|
docker_container:
|
||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
state: absent
|
state: absent
|
||||||
force_kill: true
|
force_kill: true
|
||||||
|
|
||||||
when: docker_api_version is version('1.25', '>=')
|
when: docker_api_version is version('1.25', '>=')
|
||||||
|
|
||||||
|
|||||||
@ -51,8 +51,8 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- create_1 is changed
|
- create_1 is changed
|
||||||
- create_2 is not changed
|
- create_2 is not changed
|
||||||
|
|
||||||
- name: Inspect container with CLI tool
|
- name: Inspect container with CLI tool
|
||||||
ansible.builtin.command:
|
ansible.builtin.command:
|
||||||
@ -78,8 +78,8 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- start_1 is changed
|
- start_1 is changed
|
||||||
- start_2 is not changed
|
- start_2 is not changed
|
||||||
|
|
||||||
- name: Inspect container with CLI tool
|
- name: Inspect container with CLI tool
|
||||||
ansible.builtin.command:
|
ansible.builtin.command:
|
||||||
@ -107,8 +107,8 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- remove_1 is changed
|
- remove_1 is changed
|
||||||
- remove_2 is not changed
|
- remove_2 is not changed
|
||||||
|
|
||||||
- name: Inspect container with CLI tool
|
- name: Inspect container with CLI tool
|
||||||
ansible.builtin.command:
|
ansible.builtin.command:
|
||||||
|
|||||||
@ -13,379 +13,379 @@
|
|||||||
msg: "Using container names '{{ cname }}' and '{{ cname2 }}', and volume name '{{ vname }}'"
|
msg: "Using container names '{{ cname }}' and '{{ cname2 }}', and volume name '{{ vname }}'"
|
||||||
|
|
||||||
- block:
|
- block:
|
||||||
- name: Get info on Docker host
|
- name: Get info on Docker host
|
||||||
docker_host_info:
|
docker_host_info:
|
||||||
register: output
|
register: output
|
||||||
|
|
||||||
- name: assert reading docker host facts when docker is running
|
- name: assert reading docker host facts when docker is running
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- output.host_info.Name is string
|
- output.host_info.Name is string
|
||||||
- output.containers is not defined
|
- output.containers is not defined
|
||||||
- output.networks is not defined
|
- output.networks is not defined
|
||||||
- output.volumes is not defined
|
- output.volumes is not defined
|
||||||
- output.images is not defined
|
- output.images is not defined
|
||||||
- output.disk_usage is not defined
|
- output.disk_usage is not defined
|
||||||
- output.can_talk_to_docker is true
|
- output.can_talk_to_docker is true
|
||||||
|
|
||||||
- block:
|
- block:
|
||||||
- name: Get info on Docker host with invalid api_version
|
- name: Get info on Docker host with invalid api_version
|
||||||
docker_host_info:
|
docker_host_info:
|
||||||
api_version: 1.999.999
|
api_version: 1.999.999
|
||||||
register: output
|
register: output
|
||||||
ignore_errors: true
|
ignore_errors: true
|
||||||
|
|
||||||
- name: assert can_talk_is_docker is false
|
- name: assert can_talk_is_docker is false
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- output is failed
|
- output is failed
|
||||||
- output.can_talk_to_docker is false
|
- output.can_talk_to_docker is false
|
||||||
|
|
||||||
- block:
|
- block:
|
||||||
- name: Get info on Docker host with invalid docker_host
|
- name: Get info on Docker host with invalid docker_host
|
||||||
docker_host_info:
|
docker_host_info:
|
||||||
docker_host: tcp://127.0.0.1:80
|
docker_host: tcp://127.0.0.1:80
|
||||||
register: output
|
register: output
|
||||||
ignore_errors: true
|
ignore_errors: true
|
||||||
|
|
||||||
- name: assert can_talk_is_docker is false
|
- name: assert can_talk_is_docker is false
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- output is failed
|
- output is failed
|
||||||
- output.can_talk_to_docker is false
|
- output.can_talk_to_docker is false
|
||||||
|
|
||||||
# Container and volume are created so that all lists are non-empty:
|
# Container and volume are created so that all lists are non-empty:
|
||||||
# * container and volume lists are non-emtpy because of the created objects;
|
# * container and volume lists are non-emtpy because of the created objects;
|
||||||
# * image list is non-empty because the image of the container is there;
|
# * image list is non-empty because the image of the container is there;
|
||||||
# * network list is always non-empty (default networks).
|
# * network list is always non-empty (default networks).
|
||||||
- name: Create running container
|
- name: Create running container
|
||||||
docker_container:
|
docker_container:
|
||||||
image: "{{ docker_test_image_alpine }}"
|
image: "{{ docker_test_image_alpine }}"
|
||||||
command: '/bin/sh -c "sleep 10m"'
|
command: '/bin/sh -c "sleep 10m"'
|
||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
labels:
|
labels:
|
||||||
key1: value1
|
key1: value1
|
||||||
key2: value2
|
key2: value2
|
||||||
state: started
|
state: started
|
||||||
register: container_output
|
register: container_output
|
||||||
|
|
||||||
- name: Create running container
|
- name: Create running container
|
||||||
docker_container:
|
docker_container:
|
||||||
image: "{{ docker_test_image_alpine }}"
|
image: "{{ docker_test_image_alpine }}"
|
||||||
name: "{{ cname2 }}"
|
name: "{{ cname2 }}"
|
||||||
labels:
|
labels:
|
||||||
key2: value2
|
key2: value2
|
||||||
key3: value3
|
key3: value3
|
||||||
state: stopped
|
state: stopped
|
||||||
register: container2_output
|
register: container2_output
|
||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- container_output is changed
|
- container_output is changed
|
||||||
- container2_output is changed
|
- container2_output is changed
|
||||||
|
|
||||||
- name: Create a volume
|
- name: Create a volume
|
||||||
docker_volume:
|
docker_volume:
|
||||||
name: "{{ vname }}"
|
name: "{{ vname }}"
|
||||||
register: volume_output
|
register: volume_output
|
||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- volume_output is changed
|
- volume_output is changed
|
||||||
|
|
||||||
- name: Get info on Docker host and list containers
|
- name: Get info on Docker host and list containers
|
||||||
docker_host_info:
|
docker_host_info:
|
||||||
containers: true
|
containers: true
|
||||||
register: output
|
register: output
|
||||||
|
|
||||||
- name: assert reading docker host facts when docker is running and list containers
|
- name: assert reading docker host facts when docker is running and list containers
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- 'output.host_info.Name is string'
|
- 'output.host_info.Name is string'
|
||||||
- 'output.networks is not defined'
|
- 'output.networks is not defined'
|
||||||
- 'output.volumes is not defined'
|
- 'output.volumes is not defined'
|
||||||
- 'output.images is not defined'
|
- 'output.images is not defined'
|
||||||
- 'output.disk_usage is not defined'
|
- 'output.disk_usage is not defined'
|
||||||
- 'output.containers[0].Image is string'
|
- 'output.containers[0].Image is string'
|
||||||
- 'output.containers[0].ImageID is not defined'
|
- 'output.containers[0].ImageID is not defined'
|
||||||
|
|
||||||
- name: Get info on Docker host and list containers matching filters (single label)
|
- name: Get info on Docker host and list containers matching filters (single label)
|
||||||
docker_host_info:
|
docker_host_info:
|
||||||
containers: true
|
containers: true
|
||||||
containers_filters:
|
containers_filters:
|
||||||
label: key1=value1
|
label: key1=value1
|
||||||
register: output
|
register: output
|
||||||
|
|
||||||
- name: assert container is returned when filters are matched (single label)
|
- name: assert container is returned when filters are matched (single label)
|
||||||
assert:
|
assert:
|
||||||
that: "output.containers | length == 1"
|
that: "output.containers | length == 1"
|
||||||
|
|
||||||
- name: Get info on Docker host and list containers matching filters (multiple labels)
|
- name: Get info on Docker host and list containers matching filters (multiple labels)
|
||||||
docker_host_info:
|
docker_host_info:
|
||||||
containers: true
|
containers: true
|
||||||
containers_filters:
|
containers_filters:
|
||||||
label:
|
label:
|
||||||
- key1=value1
|
- key1=value1
|
||||||
- key2=value2
|
- key2=value2
|
||||||
register: output
|
register: output
|
||||||
|
|
||||||
- name: assert container is returned when filters are matched (multiple labels)
|
- name: assert container is returned when filters are matched (multiple labels)
|
||||||
assert:
|
assert:
|
||||||
that: "output.containers | length == 1"
|
that: "output.containers | length == 1"
|
||||||
|
|
||||||
- name: Get info on Docker host and do not list containers which do not match filters
|
- name: Get info on Docker host and do not list containers which do not match filters
|
||||||
docker_host_info:
|
docker_host_info:
|
||||||
containers: true
|
containers: true
|
||||||
containers_filters:
|
containers_filters:
|
||||||
label:
|
label:
|
||||||
- key1=value1
|
- key1=value1
|
||||||
- key2=value2
|
- key2=value2
|
||||||
- key3=value3
|
- key3=value3
|
||||||
register: output
|
register: output
|
||||||
|
|
||||||
- name: assert no container is returned when filters are not matched
|
- name: assert no container is returned when filters are not matched
|
||||||
assert:
|
assert:
|
||||||
that: "output.containers | length == 0"
|
that: "output.containers | length == 0"
|
||||||
|
|
||||||
- name: Get info on Docker host and list containers matching filters (single label, not all containers)
|
- name: Get info on Docker host and list containers matching filters (single label, not all containers)
|
||||||
docker_host_info:
|
docker_host_info:
|
||||||
containers: true
|
containers: true
|
||||||
containers_all: false
|
containers_all: false
|
||||||
containers_filters:
|
containers_filters:
|
||||||
label: key2=value2
|
label: key2=value2
|
||||||
register: output
|
register: output
|
||||||
|
|
||||||
- name: Get info on Docker host and list containers matching filters (single label, all containers)
|
- name: Get info on Docker host and list containers matching filters (single label, all containers)
|
||||||
docker_host_info:
|
docker_host_info:
|
||||||
containers: true
|
containers: true
|
||||||
containers_all: true
|
containers_all: true
|
||||||
containers_filters:
|
containers_filters:
|
||||||
label: key2=value2
|
label: key2=value2
|
||||||
register: output_all
|
register: output_all
|
||||||
|
|
||||||
- name: assert one resp. two container is returned
|
- name: assert one resp. two container is returned
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- "output.containers | length == 1"
|
- "output.containers | length == 1"
|
||||||
- "output_all.containers | length == 2"
|
- "output_all.containers | length == 2"
|
||||||
|
|
||||||
- name: Get info on Docker host and list containers with verbose output
|
- name: Get info on Docker host and list containers with verbose output
|
||||||
docker_host_info:
|
docker_host_info:
|
||||||
containers: true
|
containers: true
|
||||||
verbose_output: true
|
verbose_output: true
|
||||||
register: output
|
register: output
|
||||||
|
|
||||||
- name: assert reading docker host facts when docker is running and list containers with verbose output
|
- name: assert reading docker host facts when docker is running and list containers with verbose output
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- 'output.host_info.Name is string'
|
- 'output.host_info.Name is string'
|
||||||
- 'output.networks is not defined'
|
- 'output.networks is not defined'
|
||||||
- 'output.volumes is not defined'
|
- 'output.volumes is not defined'
|
||||||
- 'output.images is not defined'
|
- 'output.images is not defined'
|
||||||
- 'output.disk_usage is not defined'
|
- 'output.disk_usage is not defined'
|
||||||
- 'output.containers[0].Image is string'
|
- 'output.containers[0].Image is string'
|
||||||
- 'output.containers[0].ImageID is string'
|
- 'output.containers[0].ImageID is string'
|
||||||
|
|
||||||
- name: Get info on Docker host and list images
|
- name: Get info on Docker host and list images
|
||||||
docker_host_info:
|
docker_host_info:
|
||||||
images: true
|
images: true
|
||||||
register: output
|
register: output
|
||||||
|
|
||||||
- name: assert reading docker host facts when docker is running and list images
|
- name: assert reading docker host facts when docker is running and list images
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- 'output.host_info.Name is string'
|
- 'output.host_info.Name is string'
|
||||||
- 'output.containers is not defined'
|
- 'output.containers is not defined'
|
||||||
- 'output.networks is not defined'
|
- 'output.networks is not defined'
|
||||||
- 'output.volumes is not defined'
|
- 'output.volumes is not defined'
|
||||||
- 'output.images[0].Id is string'
|
- 'output.images[0].Id is string'
|
||||||
- 'output.images[0].ParentId is not defined'
|
- 'output.images[0].ParentId is not defined'
|
||||||
- 'output.disk_usage is not defined'
|
- 'output.disk_usage is not defined'
|
||||||
|
|
||||||
- name: Get info on Docker host and list images with verbose output
|
- name: Get info on Docker host and list images with verbose output
|
||||||
docker_host_info:
|
docker_host_info:
|
||||||
images: true
|
images: true
|
||||||
verbose_output: true
|
verbose_output: true
|
||||||
register: output
|
register: output
|
||||||
|
|
||||||
- name: assert reading docker host facts when docker is running and list images with verbose output
|
- name: assert reading docker host facts when docker is running and list images with verbose output
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- 'output.host_info.Name is string'
|
- 'output.host_info.Name is string'
|
||||||
- 'output.containers is not defined'
|
- 'output.containers is not defined'
|
||||||
- 'output.networks is not defined'
|
- 'output.networks is not defined'
|
||||||
- 'output.volumes is not defined'
|
- 'output.volumes is not defined'
|
||||||
- 'output.images[0].Id is string'
|
- 'output.images[0].Id is string'
|
||||||
- 'output.images[0].ParentId is string'
|
- 'output.images[0].ParentId is string'
|
||||||
- 'output.disk_usage is not defined'
|
- 'output.disk_usage is not defined'
|
||||||
|
|
||||||
- name: Get info on Docker host and list networks
|
- name: Get info on Docker host and list networks
|
||||||
docker_host_info:
|
docker_host_info:
|
||||||
networks: true
|
networks: true
|
||||||
register: output
|
register: output
|
||||||
|
|
||||||
- name: assert reading docker host facts when docker is running and list networks
|
- name: assert reading docker host facts when docker is running and list networks
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- 'output.host_info.Name is string'
|
- 'output.host_info.Name is string'
|
||||||
- 'output.containers is not defined'
|
- 'output.containers is not defined'
|
||||||
- 'output.networks[0].Id is string'
|
- 'output.networks[0].Id is string'
|
||||||
- 'output.networks[0].Created is not defined'
|
- 'output.networks[0].Created is not defined'
|
||||||
- 'output.volumes is not defined'
|
- 'output.volumes is not defined'
|
||||||
- 'output.images is not defined'
|
- 'output.images is not defined'
|
||||||
- 'output.disk_usage is not defined'
|
- 'output.disk_usage is not defined'
|
||||||
|
|
||||||
- name: Get info on Docker host and list networks with verbose output
|
- name: Get info on Docker host and list networks with verbose output
|
||||||
docker_host_info:
|
docker_host_info:
|
||||||
networks: true
|
networks: true
|
||||||
verbose_output: true
|
verbose_output: true
|
||||||
register: output
|
register: output
|
||||||
|
|
||||||
- name: assert reading docker host facts when docker is running and list networks with verbose output
|
- name: assert reading docker host facts when docker is running and list networks with verbose output
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- 'output.host_info.Name is string'
|
- 'output.host_info.Name is string'
|
||||||
- 'output.containers is not defined'
|
- 'output.containers is not defined'
|
||||||
- 'output.networks[0].Id is string'
|
- 'output.networks[0].Id is string'
|
||||||
- 'output.networks[0].Created is string'
|
- 'output.networks[0].Created is string'
|
||||||
- 'output.volumes is not defined'
|
- 'output.volumes is not defined'
|
||||||
- 'output.images is not defined'
|
- 'output.images is not defined'
|
||||||
- 'output.disk_usage is not defined'
|
- 'output.disk_usage is not defined'
|
||||||
|
|
||||||
- name: Get info on Docker host and list volumes
|
- name: Get info on Docker host and list volumes
|
||||||
docker_host_info:
|
docker_host_info:
|
||||||
volumes: true
|
volumes: true
|
||||||
register: output
|
register: output
|
||||||
|
|
||||||
- name: assert reading docker host facts when docker is running and list volumes
|
- name: assert reading docker host facts when docker is running and list volumes
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- 'output.host_info.Name is string'
|
- 'output.host_info.Name is string'
|
||||||
- 'output.containers is not defined'
|
- 'output.containers is not defined'
|
||||||
- 'output.networks is not defined'
|
- 'output.networks is not defined'
|
||||||
- 'output.volumes[0].Name is string'
|
- 'output.volumes[0].Name is string'
|
||||||
- 'output.volumes[0].Mountpoint is not defined'
|
- 'output.volumes[0].Mountpoint is not defined'
|
||||||
- 'output.images is not defined'
|
- 'output.images is not defined'
|
||||||
- 'output.disk_usage is not defined'
|
- 'output.disk_usage is not defined'
|
||||||
|
|
||||||
- name: Get info on Docker host and list volumes with verbose output
|
- name: Get info on Docker host and list volumes with verbose output
|
||||||
docker_host_info:
|
docker_host_info:
|
||||||
volumes: true
|
volumes: true
|
||||||
verbose_output: true
|
verbose_output: true
|
||||||
register: output
|
register: output
|
||||||
|
|
||||||
- name: assert reading docker host facts when docker is running and list volumes with verbose output
|
- name: assert reading docker host facts when docker is running and list volumes with verbose output
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- 'output.host_info.Name is string'
|
- 'output.host_info.Name is string'
|
||||||
- 'output.containers is not defined'
|
- 'output.containers is not defined'
|
||||||
- 'output.networks is not defined'
|
- 'output.networks is not defined'
|
||||||
- 'output.volumes[0].Name is string'
|
- 'output.volumes[0].Name is string'
|
||||||
- 'output.volumes[0].Mountpoint is string'
|
- 'output.volumes[0].Mountpoint is string'
|
||||||
- 'output.images is not defined'
|
- 'output.images is not defined'
|
||||||
- 'output.disk_usage is not defined'
|
- 'output.disk_usage is not defined'
|
||||||
|
|
||||||
- name: Get info on Docker host and get disk usage
|
- name: Get info on Docker host and get disk usage
|
||||||
docker_host_info:
|
docker_host_info:
|
||||||
disk_usage: true
|
disk_usage: true
|
||||||
register: output
|
register: output
|
||||||
|
|
||||||
- name: assert reading docker host facts when docker is running and get disk usage
|
- name: assert reading docker host facts when docker is running and get disk usage
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- 'output.host_info.Name is string'
|
- 'output.host_info.Name is string'
|
||||||
- 'output.containers is not defined'
|
- 'output.containers is not defined'
|
||||||
- 'output.networks is not defined'
|
- 'output.networks is not defined'
|
||||||
- 'output.volumes is not defined'
|
- 'output.volumes is not defined'
|
||||||
- 'output.images is not defined'
|
- 'output.images is not defined'
|
||||||
- 'output.disk_usage.LayersSize is number'
|
- 'output.disk_usage.LayersSize is number'
|
||||||
- 'output.disk_usage.Images is not defined'
|
- 'output.disk_usage.Images is not defined'
|
||||||
- 'output.disk_usage.Containers is not defined'
|
- 'output.disk_usage.Containers is not defined'
|
||||||
- 'output.disk_usage.Volumes is not defined'
|
- 'output.disk_usage.Volumes is not defined'
|
||||||
|
|
||||||
- name: Get info on Docker host and get disk usage with verbose output
|
- name: Get info on Docker host and get disk usage with verbose output
|
||||||
docker_host_info:
|
docker_host_info:
|
||||||
disk_usage: true
|
disk_usage: true
|
||||||
verbose_output: true
|
verbose_output: true
|
||||||
register: output
|
register: output
|
||||||
|
|
||||||
- name: assert reading docker host facts when docker is running and get disk usage with verbose output
|
- name: assert reading docker host facts when docker is running and get disk usage with verbose output
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- 'output.host_info.Name is string'
|
- 'output.host_info.Name is string'
|
||||||
- 'output.containers is not defined'
|
- 'output.containers is not defined'
|
||||||
- 'output.networks is not defined'
|
- 'output.networks is not defined'
|
||||||
- 'output.volumes is not defined'
|
- 'output.volumes is not defined'
|
||||||
- 'output.images is not defined'
|
- 'output.images is not defined'
|
||||||
- 'output.disk_usage.LayersSize is number'
|
- 'output.disk_usage.LayersSize is number'
|
||||||
- 'output.disk_usage.Images is sequence'
|
- 'output.disk_usage.Images is sequence'
|
||||||
- 'output.disk_usage.Containers is sequence'
|
- 'output.disk_usage.Containers is sequence'
|
||||||
- 'output.disk_usage.Volumes is sequence'
|
- 'output.disk_usage.Volumes is sequence'
|
||||||
|
|
||||||
- name: Get info on Docker host, disk usage and get all lists together
|
- name: Get info on Docker host, disk usage and get all lists together
|
||||||
docker_host_info:
|
docker_host_info:
|
||||||
volumes: true
|
volumes: true
|
||||||
containers: true
|
containers: true
|
||||||
networks: true
|
networks: true
|
||||||
images: true
|
images: true
|
||||||
disk_usage: true
|
disk_usage: true
|
||||||
register: output
|
register: output
|
||||||
|
|
||||||
- name: assert reading docker host facts when docker is running, disk usage and get lists together
|
- name: assert reading docker host facts when docker is running, disk usage and get lists together
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- 'output.host_info.Name is string'
|
- 'output.host_info.Name is string'
|
||||||
- 'output.containers[0].Image is string'
|
- 'output.containers[0].Image is string'
|
||||||
- 'output.containers[0].ImageID is not defined'
|
- 'output.containers[0].ImageID is not defined'
|
||||||
- 'output.networks[0].Id is string'
|
- 'output.networks[0].Id is string'
|
||||||
- 'output.networks[0].Created is not defined'
|
- 'output.networks[0].Created is not defined'
|
||||||
- 'output.volumes[0].Name is string'
|
- 'output.volumes[0].Name is string'
|
||||||
- 'output.volumes[0].Mountpoint is not defined'
|
- 'output.volumes[0].Mountpoint is not defined'
|
||||||
- 'output.images[0].Id is string'
|
- 'output.images[0].Id is string'
|
||||||
- 'output.images[0].ParentId is not defined'
|
- 'output.images[0].ParentId is not defined'
|
||||||
- 'output.disk_usage.LayersSize is number'
|
- 'output.disk_usage.LayersSize is number'
|
||||||
- 'output.disk_usage.Images is not defined'
|
- 'output.disk_usage.Images is not defined'
|
||||||
- 'output.disk_usage.Containers is not defined'
|
- 'output.disk_usage.Containers is not defined'
|
||||||
- 'output.disk_usage.Volumes is not defined'
|
- 'output.disk_usage.Volumes is not defined'
|
||||||
|
|
||||||
- name: Get info on Docker host, disk usage and get all lists together with verbose output
|
- name: Get info on Docker host, disk usage and get all lists together with verbose output
|
||||||
docker_host_info:
|
docker_host_info:
|
||||||
volumes: true
|
volumes: true
|
||||||
containers: true
|
containers: true
|
||||||
networks: true
|
networks: true
|
||||||
images: true
|
images: true
|
||||||
disk_usage: true
|
disk_usage: true
|
||||||
verbose_output: true
|
verbose_output: true
|
||||||
register: output
|
register: output
|
||||||
|
|
||||||
- name: assert reading docker host facts when docker is running and get disk usage with verbose output
|
- name: assert reading docker host facts when docker is running and get disk usage with verbose output
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- 'output.host_info.Name is string'
|
- 'output.host_info.Name is string'
|
||||||
- 'output.containers[0].Image is string'
|
- 'output.containers[0].Image is string'
|
||||||
- 'output.containers[0].ImageID is string'
|
- 'output.containers[0].ImageID is string'
|
||||||
- 'output.networks[0].Id is string'
|
- 'output.networks[0].Id is string'
|
||||||
- 'output.networks[0].Created is string'
|
- 'output.networks[0].Created is string'
|
||||||
- 'output.volumes[0].Name is string'
|
- 'output.volumes[0].Name is string'
|
||||||
- 'output.volumes[0].Mountpoint is string'
|
- 'output.volumes[0].Mountpoint is string'
|
||||||
- 'output.images[0].Id is string'
|
- 'output.images[0].Id is string'
|
||||||
- 'output.images[0].ParentId is string'
|
- 'output.images[0].ParentId is string'
|
||||||
- 'output.disk_usage.LayersSize is number'
|
- 'output.disk_usage.LayersSize is number'
|
||||||
- 'output.disk_usage.Images is sequence'
|
- 'output.disk_usage.Images is sequence'
|
||||||
- 'output.disk_usage.Containers is sequence'
|
- 'output.disk_usage.Containers is sequence'
|
||||||
- 'output.disk_usage.Volumes is sequence'
|
- 'output.disk_usage.Volumes is sequence'
|
||||||
|
|
||||||
always:
|
always:
|
||||||
- name: Delete containers
|
- name: Delete containers
|
||||||
docker_container:
|
docker_container:
|
||||||
name: "{{ item }}"
|
name: "{{ item }}"
|
||||||
state: absent
|
state: absent
|
||||||
force_kill: true
|
force_kill: true
|
||||||
loop:
|
loop:
|
||||||
- "{{ cname }}"
|
- "{{ cname }}"
|
||||||
- "{{ cname2 }}"
|
- "{{ cname2 }}"
|
||||||
|
|
||||||
- name: Delete volume
|
- name: Delete volume
|
||||||
docker_volume:
|
docker_volume:
|
||||||
name: "{{ vname }}"
|
name: "{{ vname }}"
|
||||||
state: absent
|
state: absent
|
||||||
|
|||||||
@ -22,7 +22,7 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- absent_2 is not changed
|
- absent_2 is not changed
|
||||||
|
|
||||||
- name: Make sure image is there
|
- name: Make sure image is there
|
||||||
docker_image:
|
docker_image:
|
||||||
@ -44,8 +44,8 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- present_1 is changed
|
- present_1 is changed
|
||||||
- present_2 is not changed
|
- present_2 is not changed
|
||||||
|
|
||||||
- name: Make sure tag is not there
|
- name: Make sure tag is not there
|
||||||
docker_image:
|
docker_image:
|
||||||
@ -83,10 +83,10 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- tag_1 is changed
|
- tag_1 is changed
|
||||||
- tag_2 is not changed
|
- tag_2 is not changed
|
||||||
- tag_3 is not changed
|
- tag_3 is not changed
|
||||||
- tag_4 is not changed
|
- tag_4 is not changed
|
||||||
|
|
||||||
- name: Cleanup alias tag
|
- name: Cleanup alias tag
|
||||||
docker_image:
|
docker_image:
|
||||||
@ -129,11 +129,11 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- fail_1 is failed
|
- fail_1 is failed
|
||||||
- "'`repository` must not be an image ID' in fail_1.msg"
|
- "'`repository` must not be an image ID' in fail_1.msg"
|
||||||
- fail_2 is failed
|
- fail_2 is failed
|
||||||
- "'Cannot push an image by ID' in fail_2.msg"
|
- "'Cannot push an image by ID' in fail_2.msg"
|
||||||
- fail_3 is failed
|
- fail_3 is failed
|
||||||
- "'Image name must not be an image ID for source=pull' in fail_3.msg"
|
- "'Image name must not be an image ID for source=pull' in fail_3.msg"
|
||||||
- fail_4 is failed
|
- fail_4 is failed
|
||||||
- "'Image name must not be an image ID for source=build' in fail_4.msg"
|
- "'Image name must not be an image ID for source=build' in fail_4.msg"
|
||||||
|
|||||||
@ -61,9 +61,9 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- push_1 is changed
|
- push_1 is changed
|
||||||
- push_2 is not changed
|
- push_2 is not changed
|
||||||
- push_3 is not changed
|
- push_3 is not changed
|
||||||
|
|
||||||
- name: Get facts of local image
|
- name: Get facts of local image
|
||||||
docker_image_info:
|
docker_image_info:
|
||||||
@ -102,11 +102,11 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- pull_1 is changed
|
- pull_1 is changed
|
||||||
- pull_2 is not changed
|
- pull_2 is not changed
|
||||||
- facts_1.images | length == 1
|
- facts_1.images | length == 1
|
||||||
- facts_2.images | length == 0
|
- facts_2.images | length == 0
|
||||||
- facts_3.images | length == 1
|
- facts_3.images | length == 1
|
||||||
|
|
||||||
- name: Pull image from test registry (with digest)
|
- name: Pull image from test registry (with digest)
|
||||||
docker_image:
|
docker_image:
|
||||||
@ -148,8 +148,8 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- push_1_different is changed
|
- push_1_different is changed
|
||||||
- push_2_different is not changed
|
- push_2_different is not changed
|
||||||
|
|
||||||
- name: Tag same image with new tag
|
- name: Tag same image with new tag
|
||||||
docker_image:
|
docker_image:
|
||||||
@ -178,24 +178,24 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
# NOTE: This should be:
|
# NOTE: This should be:
|
||||||
# - push_1_same is changed
|
# - push_1_same is changed
|
||||||
# Unfortunately docker does *NOT* report whether the tag already existed or not.
|
# Unfortunately docker does *NOT* report whether the tag already existed or not.
|
||||||
# Here are the logs returned by client.push() for both tasks (which are exactly the same):
|
# Here are the logs returned by client.push() for both tasks (which are exactly the same):
|
||||||
# push_1_same:
|
# push_1_same:
|
||||||
# {"status": "The push refers to repository [localhost:32796/test/hello-world]"},
|
# {"status": "The push refers to repository [localhost:32796/test/hello-world]"},
|
||||||
# {"id": "3fc64803ca2d", "progressDetail": {}, "status": "Preparing"},
|
# {"id": "3fc64803ca2d", "progressDetail": {}, "status": "Preparing"},
|
||||||
# {"id": "3fc64803ca2d", "progressDetail": {}, "status": "Layer already exists"},
|
# {"id": "3fc64803ca2d", "progressDetail": {}, "status": "Layer already exists"},
|
||||||
# {"status": "newtag2: digest: sha256:92251458088c638061cda8fd8b403b76d661a4dc6b7ee71b6affcf1872557b2b size: 528"},
|
# {"status": "newtag2: digest: sha256:92251458088c638061cda8fd8b403b76d661a4dc6b7ee71b6affcf1872557b2b size: 528"},
|
||||||
# {"aux": {"Digest": "sha256:92251458088c638061cda8fd8b403b76d661a4dc6b7ee71b6affcf1872557b2b", "Size": 528, "Tag": "newtag2"}, "progressDetail": {}}
|
# {"aux": {"Digest": "sha256:92251458088c638061cda8fd8b403b76d661a4dc6b7ee71b6affcf1872557b2b", "Size": 528, "Tag": "newtag2"}, "progressDetail": {}}
|
||||||
# push_2_same:
|
# push_2_same:
|
||||||
# {"status": "The push refers to repository [localhost:32796/test/hello-world]"},
|
# {"status": "The push refers to repository [localhost:32796/test/hello-world]"},
|
||||||
# {"id": "3fc64803ca2d", "progressDetail": {}, "status": "Preparing"},
|
# {"id": "3fc64803ca2d", "progressDetail": {}, "status": "Preparing"},
|
||||||
# {"id": "3fc64803ca2d", "progressDetail": {}, "status": "Layer already exists"},
|
# {"id": "3fc64803ca2d", "progressDetail": {}, "status": "Layer already exists"},
|
||||||
# {"status": "newtag2: digest: sha256:92251458088c638061cda8fd8b403b76d661a4dc6b7ee71b6affcf1872557b2b size: 528"},
|
# {"status": "newtag2: digest: sha256:92251458088c638061cda8fd8b403b76d661a4dc6b7ee71b6affcf1872557b2b size: 528"},
|
||||||
# {"aux": {"Digest": "sha256:92251458088c638061cda8fd8b403b76d661a4dc6b7ee71b6affcf1872557b2b", "Size": 528, "Tag": "newtag2"}, "progressDetail": {}}
|
# {"aux": {"Digest": "sha256:92251458088c638061cda8fd8b403b76d661a4dc6b7ee71b6affcf1872557b2b", "Size": 528, "Tag": "newtag2"}, "progressDetail": {}}
|
||||||
- push_1_same is not changed
|
- push_1_same is not changed
|
||||||
- push_2_same is not changed
|
- push_2_same is not changed
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
## repository ######################################################
|
## repository ######################################################
|
||||||
@ -241,10 +241,10 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- repository_1 is changed
|
- repository_1 is changed
|
||||||
- repository_2 is not changed
|
- repository_2 is not changed
|
||||||
- repository_3 is changed
|
- repository_3 is changed
|
||||||
- repository_4 is not changed
|
- repository_4 is not changed
|
||||||
|
|
||||||
- name: Get facts of image
|
- name: Get facts of image
|
||||||
docker_image_info:
|
docker_image_info:
|
||||||
@ -259,4 +259,4 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- facts_1.images | length == 1
|
- facts_1.images | length == 1
|
||||||
|
|||||||
@ -63,8 +63,8 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- buildargs_1 is changed
|
- buildargs_1 is changed
|
||||||
- buildargs_2 is not failed and buildargs_2 is not changed
|
- buildargs_2 is not failed and buildargs_2 is not changed
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
## build.container_limits ##########################################
|
## build.container_limits ##########################################
|
||||||
@ -102,14 +102,14 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
# It *sometimes* happens that the first task does not fail.
|
# It *sometimes* happens that the first task does not fail.
|
||||||
# For now, we work around this by
|
# For now, we work around this by
|
||||||
# a) requiring that if it fails, the message must
|
# a) requiring that if it fails, the message must
|
||||||
# contain 'Minimum memory limit allowed is (4|6)MB', and
|
# contain 'Minimum memory limit allowed is (4|6)MB', and
|
||||||
# b) requiring that either the first task, or the second
|
# b) requiring that either the first task, or the second
|
||||||
# task is changed, but not both.
|
# task is changed, but not both.
|
||||||
- "not container_limits_1 is failed or ('Minimum memory limit allowed is ') in container_limits_1.msg"
|
- "not container_limits_1 is failed or ('Minimum memory limit allowed is ') in container_limits_1.msg"
|
||||||
- "container_limits_1 is changed or container_limits_2 is changed and not (container_limits_1 is changed and container_limits_2 is changed)"
|
- "container_limits_1 is changed or container_limits_2 is changed and not (container_limits_1 is changed and container_limits_2 is changed)"
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
## build.dockerfile ################################################
|
## build.dockerfile ################################################
|
||||||
@ -133,9 +133,9 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- dockerfile_1 is changed
|
- dockerfile_1 is changed
|
||||||
- "('FROM ' ~ docker_test_image_alpine) in dockerfile_1.stdout"
|
- "('FROM ' ~ docker_test_image_alpine) in dockerfile_1.stdout"
|
||||||
- dockerfile_1['image']['Config']['WorkingDir'] == '/newdata'
|
- dockerfile_1['image']['Config']['WorkingDir'] == '/newdata'
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
## build.platform ##################################################
|
## build.platform ##################################################
|
||||||
@ -177,8 +177,8 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- platform_1 is changed
|
- platform_1 is changed
|
||||||
- platform_2 is not failed and platform_2 is not changed
|
- platform_2 is not failed and platform_2 is not changed
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
## force ###########################################################
|
## force ###########################################################
|
||||||
@ -222,8 +222,8 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- force_1 is changed
|
- force_1 is changed
|
||||||
- force_2 is not changed
|
- force_2 is not changed
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
## load path #######################################################
|
## load path #######################################################
|
||||||
@ -350,15 +350,15 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- load_image is changed
|
- load_image is changed
|
||||||
- archive_image['image']['Id'] == load_image['image']['Id']
|
- archive_image['image']['Id'] == load_image['image']['Id']
|
||||||
- load_image_1 is not changed
|
- load_image_1 is not changed
|
||||||
- load_image_2 is failed
|
- load_image_2 is failed
|
||||||
- >-
|
- >-
|
||||||
("The archive did not contain image 'foo:bar'. Instead, found '" ~ docker_test_image_hello_world ~ "'.") == load_image_2.msg
|
("The archive did not contain image 'foo:bar'. Instead, found '" ~ docker_test_image_hello_world ~ "'.") == load_image_2.msg
|
||||||
- load_image_3 is failed
|
- load_image_3 is failed
|
||||||
- '"Detected no loaded images. Archive potentially corrupt?" == load_image_3.msg'
|
- '"Detected no loaded images. Archive potentially corrupt?" == load_image_3.msg'
|
||||||
- load_image_4 is not changed
|
- load_image_4 is not changed
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
## build.path ######################################################
|
## build.path ######################################################
|
||||||
@ -416,8 +416,8 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- dockerfile_2 is changed
|
- dockerfile_2 is changed
|
||||||
- dockerfile_2.image.Config.WorkingDir == '/first'
|
- dockerfile_2.image.Config.WorkingDir == '/first'
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
## build.etc_hosts #################################################
|
## build.etc_hosts #################################################
|
||||||
|
|||||||
@ -51,8 +51,8 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- buildargs_1 is changed
|
- buildargs_1 is changed
|
||||||
- buildargs_2 is not changed
|
- buildargs_2 is not changed
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
## dockerfile ######################################################
|
## dockerfile ######################################################
|
||||||
@ -72,9 +72,9 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- dockerfile_1 is changed
|
- dockerfile_1 is changed
|
||||||
- "('FROM ' ~ docker_test_image_alpine) in dockerfile_1.stderr"
|
- "('FROM ' ~ docker_test_image_alpine) in dockerfile_1.stderr"
|
||||||
- dockerfile_1['image']['Config']['WorkingDir'] == '/newdata'
|
- dockerfile_1['image']['Config']['WorkingDir'] == '/newdata'
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
## platform ########################################################
|
## platform ########################################################
|
||||||
@ -106,8 +106,8 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- platform_1 is changed
|
- platform_1 is changed
|
||||||
- platform_2 is not changed
|
- platform_2 is not changed
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
## target ##########################################################
|
## target ##########################################################
|
||||||
@ -128,8 +128,8 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- dockerfile_2 is changed
|
- dockerfile_2 is changed
|
||||||
- dockerfile_2.image.Config.WorkingDir == '/first'
|
- dockerfile_2.image.Config.WorkingDir == '/first'
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
## etc_hosts #######################################################
|
## etc_hosts #######################################################
|
||||||
|
|||||||
@ -9,50 +9,50 @@
|
|||||||
####################################################################
|
####################################################################
|
||||||
|
|
||||||
- block:
|
- block:
|
||||||
- name: Make sure image is not there
|
- name: Make sure image is not there
|
||||||
docker_image_remove:
|
docker_image_remove:
|
||||||
name: "{{ docker_test_image_alpine_different }}"
|
name: "{{ docker_test_image_alpine_different }}"
|
||||||
|
|
||||||
- name: Inspect a non-available image
|
- name: Inspect a non-available image
|
||||||
docker_image_info:
|
docker_image_info:
|
||||||
name: "{{ docker_test_image_alpine_different }}"
|
name: "{{ docker_test_image_alpine_different }}"
|
||||||
register: result
|
register: result
|
||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- "result.images|length == 0"
|
- "result.images|length == 0"
|
||||||
|
|
||||||
- name: Make sure images are there
|
- name: Make sure images are there
|
||||||
docker_image_pull:
|
docker_image_pull:
|
||||||
name: "{{ item }}"
|
name: "{{ item }}"
|
||||||
loop:
|
loop:
|
||||||
- "{{ docker_test_image_hello_world }}"
|
- "{{ docker_test_image_hello_world }}"
|
||||||
- "{{ docker_test_image_alpine }}"
|
- "{{ docker_test_image_alpine }}"
|
||||||
|
|
||||||
- name: Inspect an available image
|
- name: Inspect an available image
|
||||||
docker_image_info:
|
docker_image_info:
|
||||||
name: "{{ docker_test_image_hello_world }}"
|
name: "{{ docker_test_image_hello_world }}"
|
||||||
register: result
|
register: result
|
||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- "result.images|length == 1"
|
- "result.images|length == 1"
|
||||||
- "docker_test_image_hello_world in result.images[0].RepoTags"
|
- "docker_test_image_hello_world in result.images[0].RepoTags"
|
||||||
|
|
||||||
- name: Inspect multiple images
|
- name: Inspect multiple images
|
||||||
docker_image_info:
|
docker_image_info:
|
||||||
name:
|
name:
|
||||||
- "{{ docker_test_image_hello_world }}"
|
- "{{ docker_test_image_hello_world }}"
|
||||||
- "{{ docker_test_image_alpine }}"
|
- "{{ docker_test_image_alpine }}"
|
||||||
register: result
|
register: result
|
||||||
|
|
||||||
- debug: var=result
|
- debug: var=result
|
||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- "result.images|length == 2"
|
- "result.images|length == 2"
|
||||||
- "docker_test_image_hello_world in result.images[0].RepoTags"
|
- "docker_test_image_hello_world in result.images[0].RepoTags"
|
||||||
- "docker_test_image_alpine in result.images[1].RepoTags"
|
- "docker_test_image_alpine in result.images[1].RepoTags"
|
||||||
|
|
||||||
when: docker_api_version is version('1.25', '>=')
|
when: docker_api_version is version('1.25', '>=')
|
||||||
|
|
||||||
|
|||||||
@ -117,55 +117,55 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- present_1_check is changed
|
- present_1_check is changed
|
||||||
- present_1_check.actions | length == 1
|
- present_1_check.actions | length == 1
|
||||||
- present_1_check.actions[0] == ('Pulled image ' ~ image_name)
|
- present_1_check.actions[0] == ('Pulled image ' ~ image_name)
|
||||||
- present_1_check.diff.before.exists is false
|
- present_1_check.diff.before.exists is false
|
||||||
- present_1_check.diff.after.id == 'unknown'
|
- present_1_check.diff.after.id == 'unknown'
|
||||||
- present_1 is changed
|
- present_1 is changed
|
||||||
- present_1.actions | length == 1
|
- present_1.actions | length == 1
|
||||||
- present_1.actions[0] == ('Pulled image ' ~ image_name)
|
- present_1.actions[0] == ('Pulled image ' ~ image_name)
|
||||||
- present_1.diff.before.exists is false
|
- present_1.diff.before.exists is false
|
||||||
- present_1.diff.after.id is string
|
- present_1.diff.after.id is string
|
||||||
- present_2_check is changed
|
- present_2_check is changed
|
||||||
- present_2_check.actions | length == 1
|
- present_2_check.actions | length == 1
|
||||||
- present_2_check.actions[0] == ('Pulled image ' ~ image_name)
|
- present_2_check.actions[0] == ('Pulled image ' ~ image_name)
|
||||||
- present_2_check.diff.before.id == present_1.diff.after.id
|
- present_2_check.diff.before.id == present_1.diff.after.id
|
||||||
- present_2_check.diff.after.id == 'unknown'
|
- present_2_check.diff.after.id == 'unknown'
|
||||||
- present_2 is not changed
|
- present_2 is not changed
|
||||||
- present_2.actions | length == 1
|
- present_2.actions | length == 1
|
||||||
- present_2.actions[0] == ('Pulled image ' ~ image_name)
|
- present_2.actions[0] == ('Pulled image ' ~ image_name)
|
||||||
- present_2.diff.before.id == present_1.diff.after.id
|
- present_2.diff.before.id == present_1.diff.after.id
|
||||||
- present_2.diff.after.id == present_1.diff.after.id
|
- present_2.diff.after.id == present_1.diff.after.id
|
||||||
- present_3_check is changed
|
- present_3_check is changed
|
||||||
- present_3_check.actions | length == 1
|
- present_3_check.actions | length == 1
|
||||||
- present_3_check.actions[0] == ('Pulled image ' ~ image_name)
|
- present_3_check.actions[0] == ('Pulled image ' ~ image_name)
|
||||||
- present_3_check.diff.before.id == present_1.diff.after.id
|
- present_3_check.diff.before.id == present_1.diff.after.id
|
||||||
- present_3_check.diff.after.id == 'unknown'
|
- present_3_check.diff.after.id == 'unknown'
|
||||||
- present_3 is changed
|
- present_3 is changed
|
||||||
- present_3.actions | length == 1
|
- present_3.actions | length == 1
|
||||||
- present_3.actions[0] == ('Pulled image ' ~ image_name)
|
- present_3.actions[0] == ('Pulled image ' ~ image_name)
|
||||||
- present_3.diff.before.id == present_1.diff.after.id
|
- present_3.diff.before.id == present_1.diff.after.id
|
||||||
- present_3.diff.after.id != present_1.diff.after.id
|
- present_3.diff.after.id != present_1.diff.after.id
|
||||||
- present_3.diff.after.id is string
|
- present_3.diff.after.id is string
|
||||||
- present_4_check is not changed
|
- present_4_check is not changed
|
||||||
- present_4_check.actions | length == 0
|
- present_4_check.actions | length == 0
|
||||||
- present_4_check.diff.before.id == present_3.diff.after.id
|
- present_4_check.diff.before.id == present_3.diff.after.id
|
||||||
- present_4_check.diff.after.id == present_3.diff.after.id
|
- present_4_check.diff.after.id == present_3.diff.after.id
|
||||||
- present_4 is not changed
|
- present_4 is not changed
|
||||||
- present_4.actions | length == 0
|
- present_4.actions | length == 0
|
||||||
- present_4.diff.before.id == present_3.diff.after.id
|
- present_4.diff.before.id == present_3.diff.after.id
|
||||||
- present_4.diff.after.id == present_3.diff.after.id
|
- present_4.diff.after.id == present_3.diff.after.id
|
||||||
- present_5_check is changed
|
- present_5_check is changed
|
||||||
- present_5_check.actions | length == 1
|
- present_5_check.actions | length == 1
|
||||||
- present_5_check.actions[0] == ('Pulled image ' ~ image_name)
|
- present_5_check.actions[0] == ('Pulled image ' ~ image_name)
|
||||||
- present_5_check.diff.before.id == present_3.diff.after.id
|
- present_5_check.diff.before.id == present_3.diff.after.id
|
||||||
- present_5_check.diff.after.id == 'unknown'
|
- present_5_check.diff.after.id == 'unknown'
|
||||||
- present_5 is changed
|
- present_5 is changed
|
||||||
- present_5.actions | length == 1
|
- present_5.actions | length == 1
|
||||||
- present_5.actions[0] == ('Pulled image ' ~ image_name)
|
- present_5.actions[0] == ('Pulled image ' ~ image_name)
|
||||||
- present_5.diff.before.id == present_3.diff.after.id
|
- present_5.diff.before.id == present_3.diff.after.id
|
||||||
- present_5.diff.after.id == present_1.diff.after.id
|
- present_5.diff.after.id == present_1.diff.after.id
|
||||||
|
|
||||||
always:
|
always:
|
||||||
- name: cleanup
|
- name: cleanup
|
||||||
@ -188,9 +188,9 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- fail_1 is failed
|
- fail_1 is failed
|
||||||
- >-
|
- >-
|
||||||
'Cannot pull an image by ID' == fail_1.msg
|
'Cannot pull an image by ID' == fail_1.msg
|
||||||
- fail_2 is failed
|
- fail_2 is failed
|
||||||
- >-
|
- >-
|
||||||
'"foo/bar" is not a valid docker tag!' == fail_2.msg
|
'"foo/bar" is not a valid docker tag!' == fail_2.msg
|
||||||
|
|||||||
@ -35,20 +35,20 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- present_1 is changed
|
- present_1 is changed
|
||||||
- present_1.actions | length == 1
|
- present_1.actions | length == 1
|
||||||
- present_1.actions[0] == ('Pulled image ' ~ docker_test_image_digest_base ~ ':sha256:' ~ docker_test_image_digest_v1)
|
- present_1.actions[0] == ('Pulled image ' ~ docker_test_image_digest_base ~ ':sha256:' ~ docker_test_image_digest_v1)
|
||||||
- present_1.diff.before.exists is false
|
- present_1.diff.before.exists is false
|
||||||
- present_1.diff.after.id is string
|
- present_1.diff.after.id is string
|
||||||
- present_2 is not changed
|
- present_2 is not changed
|
||||||
- present_2.actions | length == 1
|
- present_2.actions | length == 1
|
||||||
- present_2.actions[0] == ('Pulled image ' ~ docker_test_image_digest_base ~ ':sha256:' ~ docker_test_image_digest_v1)
|
- present_2.actions[0] == ('Pulled image ' ~ docker_test_image_digest_base ~ ':sha256:' ~ docker_test_image_digest_v1)
|
||||||
- present_2.diff.before.id == present_1.diff.after.id
|
- present_2.diff.before.id == present_1.diff.after.id
|
||||||
- present_2.diff.after.id == present_1.diff.after.id
|
- present_2.diff.after.id == present_1.diff.after.id
|
||||||
- present_3 is not changed
|
- present_3 is not changed
|
||||||
- present_3.actions | length == 0
|
- present_3.actions | length == 0
|
||||||
- present_3.diff.before.id == present_1.diff.after.id
|
- present_3.diff.before.id == present_1.diff.after.id
|
||||||
- present_3.diff.after.id == present_1.diff.after.id
|
- present_3.diff.after.id == present_1.diff.after.id
|
||||||
|
|
||||||
- name: Pull image 2 (check mode)
|
- name: Pull image 2 (check mode)
|
||||||
docker_image_pull:
|
docker_image_pull:
|
||||||
@ -67,17 +67,17 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- present_4 is changed
|
- present_4 is changed
|
||||||
- present_4.actions | length == 1
|
- present_4.actions | length == 1
|
||||||
- present_4.actions[0] == ('Pulled image ' ~ docker_test_image_digest_base ~ ':sha256:' ~ docker_test_image_digest_v2)
|
- present_4.actions[0] == ('Pulled image ' ~ docker_test_image_digest_base ~ ':sha256:' ~ docker_test_image_digest_v2)
|
||||||
- present_4.diff.before.exists is false
|
- present_4.diff.before.exists is false
|
||||||
- present_4.diff.after.id == 'unknown'
|
- present_4.diff.after.id == 'unknown'
|
||||||
- present_5 is changed
|
- present_5 is changed
|
||||||
- present_5.actions | length == 1
|
- present_5.actions | length == 1
|
||||||
- present_5.actions[0] == ('Pulled image ' ~ docker_test_image_digest_base ~ ':sha256:' ~ docker_test_image_digest_v2)
|
- present_5.actions[0] == ('Pulled image ' ~ docker_test_image_digest_base ~ ':sha256:' ~ docker_test_image_digest_v2)
|
||||||
- present_5.diff.before.exists is false
|
- present_5.diff.before.exists is false
|
||||||
- present_5.diff.after.id != present_1.diff.after.id
|
- present_5.diff.after.id != present_1.diff.after.id
|
||||||
- present_5.diff.after.id is string
|
- present_5.diff.after.id is string
|
||||||
|
|
||||||
always:
|
always:
|
||||||
- name: cleanup
|
- name: cleanup
|
||||||
|
|||||||
@ -103,24 +103,24 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- pull_1_check is changed
|
- pull_1_check is changed
|
||||||
- pull_1_check.diff.before.exists is false
|
- pull_1_check.diff.before.exists is false
|
||||||
- pull_1_check.diff.after.id == 'unknown'
|
- pull_1_check.diff.after.id == 'unknown'
|
||||||
- pull_1 is changed
|
- pull_1 is changed
|
||||||
- pull_1.diff.before.exists is false
|
- pull_1.diff.before.exists is false
|
||||||
- pull_1.diff.after.id == facts_1.images[0].Id
|
- pull_1.diff.after.id == facts_1.images[0].Id
|
||||||
- pull_2_check is not changed
|
- pull_2_check is not changed
|
||||||
- pull_2_check.diff.before.id == facts_1.images[0].Id
|
- pull_2_check.diff.before.id == facts_1.images[0].Id
|
||||||
- pull_2_check.diff.before == pull_2.diff.after
|
- pull_2_check.diff.before == pull_2.diff.after
|
||||||
- pull_2 is not changed
|
- pull_2 is not changed
|
||||||
- pull_2.diff.before.id == facts_1.images[0].Id
|
- pull_2.diff.before.id == facts_1.images[0].Id
|
||||||
- pull_2.diff.before == pull_2.diff.after
|
- pull_2.diff.before == pull_2.diff.after
|
||||||
- pull_3_check is changed
|
- pull_3_check is changed
|
||||||
- pull_3_check.diff.before.id == facts_1.images[0].Id
|
- pull_3_check.diff.before.id == facts_1.images[0].Id
|
||||||
- pull_3_check.diff.after.id == 'unknown'
|
- pull_3_check.diff.after.id == 'unknown'
|
||||||
- pull_3 is not changed
|
- pull_3 is not changed
|
||||||
- pull_3.diff.before.id == facts_1.images[0].Id
|
- pull_3.diff.before.id == facts_1.images[0].Id
|
||||||
- pull_3.diff.before == pull_2.diff.after
|
- pull_3.diff.before == pull_2.diff.after
|
||||||
- facts_1.images | length == 1
|
- facts_1.images | length == 1
|
||||||
- facts_2.images | length == 0
|
- facts_2.images | length == 0
|
||||||
- facts_3.images | length == 1
|
- facts_3.images | length == 1
|
||||||
|
|||||||
@ -43,18 +43,18 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- fail_1 is failed
|
- fail_1 is failed
|
||||||
- >-
|
- >-
|
||||||
'Cannot find image registry.example.com:5000/foo/bar:baz' == fail_1.msg
|
'Cannot find image registry.example.com:5000/foo/bar:baz' == fail_1.msg
|
||||||
- fail_2 is failed
|
- fail_2 is failed
|
||||||
- >-
|
- >-
|
||||||
'Cannot push an image by ID' == fail_2.msg
|
'Cannot push an image by ID' == fail_2.msg
|
||||||
- fail_3 is failed
|
- fail_3 is failed
|
||||||
- >-
|
- >-
|
||||||
'Cannot push an image by digest' == fail_3.msg
|
'Cannot push an image by digest' == fail_3.msg
|
||||||
- fail_4 is failed
|
- fail_4 is failed
|
||||||
- >-
|
- >-
|
||||||
'"foo/bar" is not a valid docker tag!' == fail_4.msg
|
'"foo/bar" is not a valid docker tag!' == fail_4.msg
|
||||||
- fail_5 is failed
|
- fail_5 is failed
|
||||||
- >-
|
- >-
|
||||||
'"foo bar" is not a valid docker tag!' == fail_5.msg
|
'"foo bar" is not a valid docker tag!' == fail_5.msg
|
||||||
|
|||||||
@ -4,147 +4,147 @@
|
|||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
- block:
|
- block:
|
||||||
- name: Log out server
|
- name: Log out server
|
||||||
docker_login:
|
docker_login:
|
||||||
registry_url: "{{ registry_frontend_address }}"
|
registry_url: "{{ registry_frontend_address }}"
|
||||||
username: testuser
|
username: testuser
|
||||||
password: hunter2
|
password: hunter2
|
||||||
state: absent
|
state: absent
|
||||||
|
|
||||||
- name: Log in with wrong password (check mode)
|
- name: Log in with wrong password (check mode)
|
||||||
docker_login:
|
docker_login:
|
||||||
registry_url: "{{ registry_frontend_address }}"
|
registry_url: "{{ registry_frontend_address }}"
|
||||||
username: testuser
|
username: testuser
|
||||||
password: "1234"
|
password: "1234"
|
||||||
state: present
|
state: present
|
||||||
register: login_failed_check
|
register: login_failed_check
|
||||||
ignore_errors: true
|
ignore_errors: true
|
||||||
check_mode: true
|
check_mode: true
|
||||||
|
|
||||||
- name: Log in with wrong password
|
- name: Log in with wrong password
|
||||||
docker_login:
|
docker_login:
|
||||||
registry_url: "{{ registry_frontend_address }}"
|
registry_url: "{{ registry_frontend_address }}"
|
||||||
username: testuser
|
username: testuser
|
||||||
password: "1234"
|
password: "1234"
|
||||||
state: present
|
state: present
|
||||||
register: login_failed
|
register: login_failed
|
||||||
ignore_errors: true
|
ignore_errors: true
|
||||||
|
|
||||||
- name: Make sure that login failed
|
- name: Make sure that login failed
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- login_failed_check is failed
|
- login_failed_check is failed
|
||||||
- "('login attempt to http://' ~ registry_frontend_address ~ '/v2/ failed') in login_failed_check.msg"
|
- "('login attempt to http://' ~ registry_frontend_address ~ '/v2/ failed') in login_failed_check.msg"
|
||||||
- login_failed is failed
|
- login_failed is failed
|
||||||
- "('login attempt to http://' ~ registry_frontend_address ~ '/v2/ failed') in login_failed.msg"
|
- "('login attempt to http://' ~ registry_frontend_address ~ '/v2/ failed') in login_failed.msg"
|
||||||
|
|
||||||
- name: Log in (check mode)
|
- name: Log in (check mode)
|
||||||
docker_login:
|
docker_login:
|
||||||
registry_url: "{{ registry_frontend_address }}"
|
registry_url: "{{ registry_frontend_address }}"
|
||||||
username: testuser
|
username: testuser
|
||||||
password: hunter2
|
password: hunter2
|
||||||
state: present
|
state: present
|
||||||
register: login_1
|
register: login_1
|
||||||
check_mode: true
|
check_mode: true
|
||||||
|
|
||||||
- name: Log in
|
- name: Log in
|
||||||
docker_login:
|
docker_login:
|
||||||
registry_url: "{{ registry_frontend_address }}"
|
registry_url: "{{ registry_frontend_address }}"
|
||||||
username: testuser
|
username: testuser
|
||||||
password: hunter2
|
password: hunter2
|
||||||
state: present
|
state: present
|
||||||
register: login_2
|
register: login_2
|
||||||
|
|
||||||
- name: Get permissions of ~/.docker/config.json
|
- name: Get permissions of ~/.docker/config.json
|
||||||
stat:
|
stat:
|
||||||
path: ~/.docker/config.json
|
path: ~/.docker/config.json
|
||||||
register: login_2_stat
|
register: login_2_stat
|
||||||
|
|
||||||
- name: Log in (idempotent)
|
- name: Log in (idempotent)
|
||||||
docker_login:
|
docker_login:
|
||||||
registry_url: "{{ registry_frontend_address }}"
|
registry_url: "{{ registry_frontend_address }}"
|
||||||
username: testuser
|
username: testuser
|
||||||
password: hunter2
|
password: hunter2
|
||||||
state: present
|
state: present
|
||||||
register: login_3
|
register: login_3
|
||||||
|
|
||||||
- name: Log in (idempotent, check mode)
|
- name: Log in (idempotent, check mode)
|
||||||
docker_login:
|
docker_login:
|
||||||
registry_url: "{{ registry_frontend_address }}"
|
registry_url: "{{ registry_frontend_address }}"
|
||||||
username: testuser
|
username: testuser
|
||||||
password: hunter2
|
password: hunter2
|
||||||
state: present
|
state: present
|
||||||
register: login_4
|
register: login_4
|
||||||
check_mode: true
|
check_mode: true
|
||||||
|
|
||||||
- name: Make sure that login worked
|
- name: Make sure that login worked
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- login_1 is changed
|
- login_1 is changed
|
||||||
- login_2 is changed
|
- login_2 is changed
|
||||||
- login_3 is not changed
|
- login_3 is not changed
|
||||||
- login_4 is not changed
|
- login_4 is not changed
|
||||||
- login_2_stat.stat.mode == '0600'
|
- login_2_stat.stat.mode == '0600'
|
||||||
|
|
||||||
- name: Log in again with wrong password (check mode)
|
- name: Log in again with wrong password (check mode)
|
||||||
docker_login:
|
docker_login:
|
||||||
registry_url: "{{ registry_frontend_address }}"
|
registry_url: "{{ registry_frontend_address }}"
|
||||||
username: testuser
|
username: testuser
|
||||||
password: "1234"
|
password: "1234"
|
||||||
state: present
|
state: present
|
||||||
register: login_failed_check
|
register: login_failed_check
|
||||||
ignore_errors: true
|
ignore_errors: true
|
||||||
check_mode: true
|
check_mode: true
|
||||||
|
|
||||||
- name: Log in again with wrong password
|
- name: Log in again with wrong password
|
||||||
docker_login:
|
docker_login:
|
||||||
registry_url: "{{ registry_frontend_address }}"
|
registry_url: "{{ registry_frontend_address }}"
|
||||||
username: testuser
|
username: testuser
|
||||||
password: "1234"
|
password: "1234"
|
||||||
state: present
|
state: present
|
||||||
register: login_failed
|
register: login_failed
|
||||||
ignore_errors: true
|
ignore_errors: true
|
||||||
|
|
||||||
- name: Make sure that login failed again
|
- name: Make sure that login failed again
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- login_failed_check is failed
|
- login_failed_check is failed
|
||||||
- "('login attempt to http://' ~ registry_frontend_address ~ '/v2/ failed') in login_failed_check.msg"
|
- "('login attempt to http://' ~ registry_frontend_address ~ '/v2/ failed') in login_failed_check.msg"
|
||||||
- login_failed is failed
|
- login_failed is failed
|
||||||
- "('login attempt to http://' ~ registry_frontend_address ~ '/v2/ failed') in login_failed.msg"
|
- "('login attempt to http://' ~ registry_frontend_address ~ '/v2/ failed') in login_failed.msg"
|
||||||
|
|
||||||
- name: Log out (check mode)
|
- name: Log out (check mode)
|
||||||
docker_login:
|
docker_login:
|
||||||
registry_url: "{{ registry_frontend_address }}"
|
registry_url: "{{ registry_frontend_address }}"
|
||||||
state: absent
|
state: absent
|
||||||
register: logout_1
|
register: logout_1
|
||||||
check_mode: true
|
check_mode: true
|
||||||
|
|
||||||
- name: Log out
|
- name: Log out
|
||||||
docker_login:
|
docker_login:
|
||||||
registry_url: "{{ registry_frontend_address }}"
|
registry_url: "{{ registry_frontend_address }}"
|
||||||
state: absent
|
state: absent
|
||||||
register: logout_2
|
register: logout_2
|
||||||
|
|
||||||
- name: Log out (idempotent)
|
- name: Log out (idempotent)
|
||||||
docker_login:
|
docker_login:
|
||||||
registry_url: "{{ registry_frontend_address }}"
|
registry_url: "{{ registry_frontend_address }}"
|
||||||
state: absent
|
state: absent
|
||||||
register: logout_3
|
register: logout_3
|
||||||
|
|
||||||
- name: Log out (idempotent, check mode)
|
- name: Log out (idempotent, check mode)
|
||||||
docker_login:
|
docker_login:
|
||||||
registry_url: "{{ registry_frontend_address }}"
|
registry_url: "{{ registry_frontend_address }}"
|
||||||
state: absent
|
state: absent
|
||||||
register: logout_4
|
register: logout_4
|
||||||
check_mode: true
|
check_mode: true
|
||||||
|
|
||||||
- name: Make sure that login worked
|
- name: Make sure that login worked
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- logout_1 is changed
|
- logout_1 is changed
|
||||||
- logout_2 is changed
|
- logout_2 is changed
|
||||||
- logout_3 is not changed
|
- logout_3 is not changed
|
||||||
- logout_4 is not changed
|
- logout_4 is not changed
|
||||||
|
|
||||||
when: registry_frontend_address != 'n/a'
|
when: registry_frontend_address != 'n/a'
|
||||||
|
|||||||
@ -4,58 +4,58 @@
|
|||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
- block:
|
- block:
|
||||||
- name: Log out server 1
|
- name: Log out server 1
|
||||||
docker_login:
|
docker_login:
|
||||||
registry_url: "{{ registry_frontend_address }}"
|
registry_url: "{{ registry_frontend_address }}"
|
||||||
username: testuser
|
username: testuser
|
||||||
password: hunter2
|
password: hunter2
|
||||||
state: absent
|
state: absent
|
||||||
|
|
||||||
- name: Log out server 2
|
- name: Log out server 2
|
||||||
docker_login:
|
docker_login:
|
||||||
registry_url: "{{ registry_frontend2_address }}"
|
registry_url: "{{ registry_frontend2_address }}"
|
||||||
username: testuser
|
username: testuser
|
||||||
password: hunter2
|
password: hunter2
|
||||||
state: absent
|
state: absent
|
||||||
|
|
||||||
- name: Log in server 1
|
- name: Log in server 1
|
||||||
docker_login:
|
docker_login:
|
||||||
registry_url: "{{ registry_frontend_address }}"
|
registry_url: "{{ registry_frontend_address }}"
|
||||||
username: testuser
|
username: testuser
|
||||||
password: hunter2
|
password: hunter2
|
||||||
state: present
|
state: present
|
||||||
register: login_1
|
register: login_1
|
||||||
|
|
||||||
- name: Log in server 2
|
- name: Log in server 2
|
||||||
docker_login:
|
docker_login:
|
||||||
registry_url: "{{ registry_frontend2_address }}"
|
registry_url: "{{ registry_frontend2_address }}"
|
||||||
username: testuser
|
username: testuser
|
||||||
password: hunter2
|
password: hunter2
|
||||||
state: present
|
state: present
|
||||||
register: login_2
|
register: login_2
|
||||||
|
|
||||||
- name: Log in server 1 (idempotent)
|
- name: Log in server 1 (idempotent)
|
||||||
docker_login:
|
docker_login:
|
||||||
registry_url: "{{ registry_frontend_address }}"
|
registry_url: "{{ registry_frontend_address }}"
|
||||||
username: testuser
|
username: testuser
|
||||||
password: hunter2
|
password: hunter2
|
||||||
state: present
|
state: present
|
||||||
register: login_1_2
|
register: login_1_2
|
||||||
|
|
||||||
- name: Log in server 2 (idempotent)
|
- name: Log in server 2 (idempotent)
|
||||||
docker_login:
|
docker_login:
|
||||||
registry_url: "{{ registry_frontend2_address }}"
|
registry_url: "{{ registry_frontend2_address }}"
|
||||||
username: testuser
|
username: testuser
|
||||||
password: hunter2
|
password: hunter2
|
||||||
state: present
|
state: present
|
||||||
register: login_2_2
|
register: login_2_2
|
||||||
|
|
||||||
- name: Make sure that login worked
|
- name: Make sure that login worked
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- login_1 is changed
|
- login_1 is changed
|
||||||
- login_2 is changed
|
- login_2 is changed
|
||||||
- login_1_2 is not changed
|
- login_1_2 is not changed
|
||||||
- login_2_2 is not changed
|
- login_2_2 is not changed
|
||||||
|
|
||||||
when: registry_frontend_address != 'n/a' and registry_frontend2_address != 'n/a'
|
when: registry_frontend_address != 'n/a' and registry_frontend2_address != 'n/a'
|
||||||
|
|||||||
@ -22,9 +22,9 @@
|
|||||||
command: /bin/sleep 10m
|
command: /bin/sleep 10m
|
||||||
state: started
|
state: started
|
||||||
loop:
|
loop:
|
||||||
- "{{ cname_1 }}"
|
- "{{ cname_1 }}"
|
||||||
- "{{ cname_2 }}"
|
- "{{ cname_2 }}"
|
||||||
- "{{ cname_3 }}"
|
- "{{ cname_3 }}"
|
||||||
loop_control:
|
loop_control:
|
||||||
loop_var: container_name
|
loop_var: container_name
|
||||||
|
|
||||||
@ -41,7 +41,7 @@
|
|||||||
name: "{{ nname_1 }}"
|
name: "{{ nname_1 }}"
|
||||||
state: present
|
state: present
|
||||||
connected:
|
connected:
|
||||||
- "{{ cname_1 }}"
|
- "{{ cname_1 }}"
|
||||||
register: networks_2
|
register: networks_2
|
||||||
|
|
||||||
- name: Connect network to containers 1 (idempotency)
|
- name: Connect network to containers 1 (idempotency)
|
||||||
@ -49,7 +49,7 @@
|
|||||||
name: "{{ nname_1 }}"
|
name: "{{ nname_1 }}"
|
||||||
state: present
|
state: present
|
||||||
connected:
|
connected:
|
||||||
- "{{ cname_1 }}"
|
- "{{ cname_1 }}"
|
||||||
register: networks_2_idem
|
register: networks_2_idem
|
||||||
|
|
||||||
- name: Connect network to containers 1 and 2
|
- name: Connect network to containers 1 and 2
|
||||||
@ -57,8 +57,8 @@
|
|||||||
name: "{{ nname_1 }}"
|
name: "{{ nname_1 }}"
|
||||||
state: present
|
state: present
|
||||||
connected:
|
connected:
|
||||||
- "{{ cname_1 }}"
|
- "{{ cname_1 }}"
|
||||||
- "{{ cname_2 }}"
|
- "{{ cname_2 }}"
|
||||||
register: networks_3
|
register: networks_3
|
||||||
|
|
||||||
- name: Connect network to containers 1 and 2 (idempotency)
|
- name: Connect network to containers 1 and 2 (idempotency)
|
||||||
@ -66,8 +66,8 @@
|
|||||||
name: "{{ nname_1 }}"
|
name: "{{ nname_1 }}"
|
||||||
state: present
|
state: present
|
||||||
connected:
|
connected:
|
||||||
- "{{ cname_1 }}"
|
- "{{ cname_1 }}"
|
||||||
- "{{ cname_2 }}"
|
- "{{ cname_2 }}"
|
||||||
register: networks_3_idem
|
register: networks_3_idem
|
||||||
|
|
||||||
- name: Connect network to container 3
|
- name: Connect network to container 3
|
||||||
@ -75,7 +75,7 @@
|
|||||||
name: "{{ nname_1 }}"
|
name: "{{ nname_1 }}"
|
||||||
state: present
|
state: present
|
||||||
connected:
|
connected:
|
||||||
- "{{ cname_3 }}"
|
- "{{ cname_3 }}"
|
||||||
appends: true
|
appends: true
|
||||||
register: networks_4
|
register: networks_4
|
||||||
|
|
||||||
@ -84,7 +84,7 @@
|
|||||||
name: "{{ nname_1 }}"
|
name: "{{ nname_1 }}"
|
||||||
state: present
|
state: present
|
||||||
connected:
|
connected:
|
||||||
- "{{ cname_3 }}"
|
- "{{ cname_3 }}"
|
||||||
appends: true
|
appends: true
|
||||||
register: networks_4_idem
|
register: networks_4_idem
|
||||||
|
|
||||||
@ -93,8 +93,8 @@
|
|||||||
name: "{{ nname_1 }}"
|
name: "{{ nname_1 }}"
|
||||||
state: present
|
state: present
|
||||||
connected:
|
connected:
|
||||||
- "{{ cname_2 }}"
|
- "{{ cname_2 }}"
|
||||||
- "{{ cname_3 }}"
|
- "{{ cname_3 }}"
|
||||||
register: networks_5
|
register: networks_5
|
||||||
|
|
||||||
- name: Disconnect network from container 1 (idempotency)
|
- name: Disconnect network from container 1 (idempotency)
|
||||||
@ -102,8 +102,8 @@
|
|||||||
name: "{{ nname_1 }}"
|
name: "{{ nname_1 }}"
|
||||||
state: present
|
state: present
|
||||||
connected:
|
connected:
|
||||||
- "{{ cname_2 }}"
|
- "{{ cname_2 }}"
|
||||||
- "{{ cname_3 }}"
|
- "{{ cname_3 }}"
|
||||||
register: networks_5_idem
|
register: networks_5_idem
|
||||||
|
|
||||||
- name: Cleanup
|
- name: Cleanup
|
||||||
@ -113,15 +113,15 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- networks_1 is changed
|
- networks_1 is changed
|
||||||
- networks_2 is changed
|
- networks_2 is changed
|
||||||
- networks_2_idem is not changed
|
- networks_2_idem is not changed
|
||||||
- networks_3 is changed
|
- networks_3 is changed
|
||||||
- networks_3_idem is not changed
|
- networks_3_idem is not changed
|
||||||
- networks_4 is changed
|
- networks_4 is changed
|
||||||
- networks_4_idem is not changed
|
- networks_4_idem is not changed
|
||||||
- networks_5 is changed
|
- networks_5 is changed
|
||||||
- networks_5_idem is not changed
|
- networks_5_idem is not changed
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
|
|
||||||
@ -131,8 +131,8 @@
|
|||||||
state: absent
|
state: absent
|
||||||
force_kill: true
|
force_kill: true
|
||||||
loop:
|
loop:
|
||||||
- "{{ cname_1 }}"
|
- "{{ cname_1 }}"
|
||||||
- "{{ cname_2 }}"
|
- "{{ cname_2 }}"
|
||||||
- "{{ cname_3 }}"
|
- "{{ cname_3 }}"
|
||||||
loop_control:
|
loop_control:
|
||||||
loop_var: container_name
|
loop_var: container_name
|
||||||
|
|||||||
@ -200,71 +200,71 @@
|
|||||||
#################### multiple IPv4 networks ####################
|
#################### multiple IPv4 networks ####################
|
||||||
|
|
||||||
- block:
|
- block:
|
||||||
- name: Create network with two IPv4 IPAM configs
|
- name: Create network with two IPv4 IPAM configs
|
||||||
docker_network:
|
docker_network:
|
||||||
name: "{{ nname_ipam_3 }}"
|
name: "{{ nname_ipam_3 }}"
|
||||||
driver: "macvlan"
|
driver: "macvlan"
|
||||||
driver_options:
|
driver_options:
|
||||||
parent: "{{ ansible_default_ipv4.alias }}"
|
parent: "{{ ansible_default_ipv4.alias }}"
|
||||||
ipam_config:
|
ipam_config:
|
||||||
- subnet: 10.26.120.0/24
|
- subnet: 10.26.120.0/24
|
||||||
- subnet: 10.26.121.0/24
|
- subnet: 10.26.121.0/24
|
||||||
register: network
|
register: network
|
||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- network is changed
|
- network is changed
|
||||||
|
|
||||||
- name: Create network with two IPv4 IPAM configs (idempotence)
|
- name: Create network with two IPv4 IPAM configs (idempotence)
|
||||||
docker_network:
|
docker_network:
|
||||||
name: "{{ nname_ipam_3 }}"
|
name: "{{ nname_ipam_3 }}"
|
||||||
driver: "macvlan"
|
driver: "macvlan"
|
||||||
driver_options:
|
driver_options:
|
||||||
parent: "{{ ansible_default_ipv4.alias }}"
|
parent: "{{ ansible_default_ipv4.alias }}"
|
||||||
ipam_config:
|
ipam_config:
|
||||||
- subnet: 10.26.121.0/24
|
- subnet: 10.26.121.0/24
|
||||||
- subnet: 10.26.120.0/24
|
- subnet: 10.26.120.0/24
|
||||||
register: network
|
register: network
|
||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- network is not changed
|
- network is not changed
|
||||||
|
|
||||||
- name: Create network with two IPv4 IPAM configs (change)
|
- name: Create network with two IPv4 IPAM configs (change)
|
||||||
docker_network:
|
docker_network:
|
||||||
name: "{{ nname_ipam_3 }}"
|
name: "{{ nname_ipam_3 }}"
|
||||||
driver: "macvlan"
|
driver: "macvlan"
|
||||||
driver_options:
|
driver_options:
|
||||||
parent: "{{ ansible_default_ipv4.alias }}"
|
parent: "{{ ansible_default_ipv4.alias }}"
|
||||||
ipam_config:
|
ipam_config:
|
||||||
- subnet: 10.26.120.0/24
|
- subnet: 10.26.120.0/24
|
||||||
- subnet: 10.26.122.0/24
|
- subnet: 10.26.122.0/24
|
||||||
register: network
|
register: network
|
||||||
diff: true
|
diff: true
|
||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- network is changed
|
- network is changed
|
||||||
- network.diff.differences | length == 1
|
- network.diff.differences | length == 1
|
||||||
|
|
||||||
- name: Create network with one IPv4 IPAM config (no change)
|
- name: Create network with one IPv4 IPAM config (no change)
|
||||||
docker_network:
|
docker_network:
|
||||||
name: "{{ nname_ipam_3 }}"
|
name: "{{ nname_ipam_3 }}"
|
||||||
driver: "macvlan"
|
driver: "macvlan"
|
||||||
driver_options:
|
driver_options:
|
||||||
parent: "{{ ansible_default_ipv4.alias }}"
|
parent: "{{ ansible_default_ipv4.alias }}"
|
||||||
ipam_config:
|
ipam_config:
|
||||||
- subnet: 10.26.122.0/24
|
- subnet: 10.26.122.0/24
|
||||||
register: network
|
register: network
|
||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- network is not changed
|
- network is not changed
|
||||||
|
|
||||||
- name: Cleanup network
|
- name: Cleanup network
|
||||||
docker_network:
|
docker_network:
|
||||||
name: "{{ nname_ipam_3 }}"
|
name: "{{ nname_ipam_3 }}"
|
||||||
state: absent
|
state: absent
|
||||||
|
|
||||||
when: ansible_facts.virtualization_type != 'docker' and ansible_default_ipv4.alias is defined
|
when: ansible_facts.virtualization_type != 'docker' and ansible_default_ipv4.alias is defined
|
||||||
|
|
||||||
|
|||||||
@ -40,9 +40,9 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- internal_1 is changed
|
- internal_1 is changed
|
||||||
- internal_2 is not changed
|
- internal_2 is not changed
|
||||||
- internal_3 is changed
|
- internal_3 is changed
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
## driver_options ##################################################
|
## driver_options ##################################################
|
||||||
@ -91,62 +91,62 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- driver_options_1 is changed
|
- driver_options_1 is changed
|
||||||
- driver_options_2 is not changed
|
- driver_options_2 is not changed
|
||||||
- driver_options_3 is not changed
|
- driver_options_3 is not changed
|
||||||
- driver_options_4 is changed
|
- driver_options_4 is changed
|
||||||
- driver_options_5 is not changed
|
- driver_options_5 is not changed
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
## scope ###########################################################
|
## scope ###########################################################
|
||||||
####################################################################
|
####################################################################
|
||||||
|
|
||||||
- block:
|
- block:
|
||||||
- name: scope
|
- name: scope
|
||||||
docker_network:
|
docker_network:
|
||||||
name: "{{ nname_1 }}"
|
name: "{{ nname_1 }}"
|
||||||
driver: bridge
|
driver: bridge
|
||||||
scope: local
|
scope: local
|
||||||
register: scope_1
|
register: scope_1
|
||||||
|
|
||||||
- name: scope (idempotency)
|
- name: scope (idempotency)
|
||||||
docker_network:
|
docker_network:
|
||||||
name: "{{ nname_1 }}"
|
name: "{{ nname_1 }}"
|
||||||
driver: bridge
|
driver: bridge
|
||||||
scope: local
|
scope: local
|
||||||
register: scope_2
|
register: scope_2
|
||||||
|
|
||||||
- name: swarm
|
- name: swarm
|
||||||
docker_swarm:
|
docker_swarm:
|
||||||
state: present
|
state: present
|
||||||
advertise_addr: "{{ ansible_default_ipv4.address | default('127.0.0.1') }}"
|
advertise_addr: "{{ ansible_default_ipv4.address | default('127.0.0.1') }}"
|
||||||
|
|
||||||
# Driver change alongside scope is intentional - bridge doesn't appear to support anything but local, and overlay can't downgrade to local. Additionally, overlay reports as swarm for swarm OR global, so no change is reported in that case.
|
# Driver change alongside scope is intentional - bridge doesn't appear to support anything but local, and overlay can't downgrade to local. Additionally, overlay reports as swarm for swarm OR global, so no change is reported in that case.
|
||||||
# Test output indicates that the scope is altered, at least, so manual inspection will be required to verify this going forward, unless we come up with a test driver that supports multiple scopes.
|
# Test output indicates that the scope is altered, at least, so manual inspection will be required to verify this going forward, unless we come up with a test driver that supports multiple scopes.
|
||||||
- name: scope (change)
|
- name: scope (change)
|
||||||
docker_network:
|
docker_network:
|
||||||
name: "{{ nname_1 }}"
|
name: "{{ nname_1 }}"
|
||||||
driver: overlay
|
driver: overlay
|
||||||
scope: swarm
|
scope: swarm
|
||||||
register: scope_3
|
register: scope_3
|
||||||
|
|
||||||
- name: cleanup network
|
- name: cleanup network
|
||||||
docker_network:
|
docker_network:
|
||||||
name: "{{ nname_1 }}"
|
name: "{{ nname_1 }}"
|
||||||
state: absent
|
state: absent
|
||||||
force: true
|
force: true
|
||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- scope_1 is changed
|
- scope_1 is changed
|
||||||
- scope_2 is not changed
|
- scope_2 is not changed
|
||||||
- scope_3 is changed
|
- scope_3 is changed
|
||||||
|
|
||||||
always:
|
always:
|
||||||
- name: cleanup swarm
|
- name: cleanup swarm
|
||||||
docker_swarm:
|
docker_swarm:
|
||||||
state: absent
|
state: absent
|
||||||
force: true
|
force: true
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
## attachable ######################################################
|
## attachable ######################################################
|
||||||
@ -181,9 +181,9 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- attachable_1 is changed
|
- attachable_1 is changed
|
||||||
- attachable_2 is not changed
|
- attachable_2 is not changed
|
||||||
- attachable_3 is changed
|
- attachable_3 is changed
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
## labels ##########################################################
|
## labels ##########################################################
|
||||||
@ -228,7 +228,7 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- labels_1 is changed
|
- labels_1 is changed
|
||||||
- labels_2 is not changed
|
- labels_2 is not changed
|
||||||
- labels_3 is not changed
|
- labels_3 is not changed
|
||||||
- labels_4 is changed
|
- labels_4 is changed
|
||||||
|
|||||||
@ -11,94 +11,94 @@
|
|||||||
dnetworks: "{{ dnetworks + [nname_1] }}"
|
dnetworks: "{{ dnetworks + [nname_1] }}"
|
||||||
|
|
||||||
- block:
|
- block:
|
||||||
# Overlay networks require swarm initialization before they'll work
|
# Overlay networks require swarm initialization before they'll work
|
||||||
- name: swarm
|
- name: swarm
|
||||||
docker_swarm:
|
docker_swarm:
|
||||||
state: present
|
state: present
|
||||||
advertise_addr: "{{ ansible_default_ipv4.address | default('127.0.0.1') }}"
|
advertise_addr: "{{ ansible_default_ipv4.address | default('127.0.0.1') }}"
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
## overlay #########################################################
|
## overlay #########################################################
|
||||||
####################################################################
|
####################################################################
|
||||||
|
|
||||||
- name: overlay
|
- name: overlay
|
||||||
docker_network:
|
docker_network:
|
||||||
name: "{{ nname_1 }}"
|
name: "{{ nname_1 }}"
|
||||||
driver: overlay
|
driver: overlay
|
||||||
driver_options:
|
driver_options:
|
||||||
com.docker.network.driver.overlay.vxlanid_list: "257"
|
com.docker.network.driver.overlay.vxlanid_list: "257"
|
||||||
register: overlay_1
|
register: overlay_1
|
||||||
|
|
||||||
- name: overlay (idempotency)
|
- name: overlay (idempotency)
|
||||||
docker_network:
|
docker_network:
|
||||||
name: "{{ nname_1 }}"
|
name: "{{ nname_1 }}"
|
||||||
driver: overlay
|
driver: overlay
|
||||||
driver_options:
|
driver_options:
|
||||||
com.docker.network.driver.overlay.vxlanid_list: "257"
|
com.docker.network.driver.overlay.vxlanid_list: "257"
|
||||||
register: overlay_2
|
register: overlay_2
|
||||||
|
|
||||||
- name: overlay (change)
|
- name: overlay (change)
|
||||||
docker_network:
|
docker_network:
|
||||||
name: "{{ nname_1 }}"
|
name: "{{ nname_1 }}"
|
||||||
driver: bridge
|
driver: bridge
|
||||||
register: overlay_3
|
register: overlay_3
|
||||||
|
|
||||||
- name: cleanup network
|
- name: cleanup network
|
||||||
docker_network:
|
docker_network:
|
||||||
name: "{{ nname_1 }}"
|
name: "{{ nname_1 }}"
|
||||||
state: absent
|
state: absent
|
||||||
force: true
|
force: true
|
||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- overlay_1 is changed
|
- overlay_1 is changed
|
||||||
- overlay_2 is not changed
|
- overlay_2 is not changed
|
||||||
- overlay_3 is changed
|
- overlay_3 is changed
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
## ingress #########################################################
|
## ingress #########################################################
|
||||||
####################################################################
|
####################################################################
|
||||||
|
|
||||||
- name: cleanup default swarm ingress network
|
- name: cleanup default swarm ingress network
|
||||||
docker_network:
|
docker_network:
|
||||||
name: ingress
|
name: ingress
|
||||||
state: absent
|
state: absent
|
||||||
|
|
||||||
- name: ingress
|
- name: ingress
|
||||||
docker_network:
|
docker_network:
|
||||||
name: "{{ nname_1 }}"
|
name: "{{ nname_1 }}"
|
||||||
driver: overlay
|
driver: overlay
|
||||||
ingress: true
|
ingress: true
|
||||||
register: ingress_1
|
register: ingress_1
|
||||||
|
|
||||||
- name: ingress (idempotency)
|
- name: ingress (idempotency)
|
||||||
docker_network:
|
docker_network:
|
||||||
name: "{{ nname_1 }}"
|
name: "{{ nname_1 }}"
|
||||||
driver: overlay
|
driver: overlay
|
||||||
ingress: true
|
ingress: true
|
||||||
register: ingress_2
|
register: ingress_2
|
||||||
|
|
||||||
- name: ingress (change)
|
- name: ingress (change)
|
||||||
docker_network:
|
docker_network:
|
||||||
name: "{{ nname_1 }}"
|
name: "{{ nname_1 }}"
|
||||||
driver: overlay
|
driver: overlay
|
||||||
ingress: false
|
ingress: false
|
||||||
register: ingress_3
|
register: ingress_3
|
||||||
|
|
||||||
- name: cleanup network
|
- name: cleanup network
|
||||||
docker_network:
|
docker_network:
|
||||||
name: "{{ nname_1 }}"
|
name: "{{ nname_1 }}"
|
||||||
state: absent
|
state: absent
|
||||||
force: true
|
force: true
|
||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- ingress_1 is changed
|
- ingress_1 is changed
|
||||||
- ingress_2 is not changed
|
- ingress_2 is not changed
|
||||||
- ingress_3 is changed
|
- ingress_3 is changed
|
||||||
|
|
||||||
always:
|
always:
|
||||||
- name: cleanup swarm
|
- name: cleanup swarm
|
||||||
docker_swarm:
|
docker_swarm:
|
||||||
state: absent
|
state: absent
|
||||||
force: true
|
force: true
|
||||||
|
|||||||
@ -30,12 +30,12 @@
|
|||||||
name: "{{ network_name }}"
|
name: "{{ network_name }}"
|
||||||
state: absent
|
state: absent
|
||||||
loop:
|
loop:
|
||||||
- "{{ nname_1 }}"
|
- "{{ nname_1 }}"
|
||||||
- "{{ nname_2 }}"
|
- "{{ nname_2 }}"
|
||||||
loop_control:
|
loop_control:
|
||||||
loop_var: network_name
|
loop_var: network_name
|
||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- networks_1 is changed
|
- networks_1 is changed
|
||||||
- networks_2 is changed
|
- networks_2 is changed
|
||||||
|
|||||||
@ -9,70 +9,70 @@
|
|||||||
####################################################################
|
####################################################################
|
||||||
|
|
||||||
- block:
|
- block:
|
||||||
- name: Create random network name
|
- name: Create random network name
|
||||||
set_fact:
|
set_fact:
|
||||||
nname: "{{ 'ansible-docker-test-%0x' % ((2**32) | random) }}"
|
nname: "{{ 'ansible-docker-test-%0x' % ((2**32) | random) }}"
|
||||||
|
|
||||||
- name: Make sure network is not there
|
- name: Make sure network is not there
|
||||||
docker_network:
|
docker_network:
|
||||||
name: "{{ nname }}"
|
name: "{{ nname }}"
|
||||||
state: absent
|
state: absent
|
||||||
force: true
|
force: true
|
||||||
|
|
||||||
- name: Inspect a non-present network
|
- name: Inspect a non-present network
|
||||||
docker_network_info:
|
docker_network_info:
|
||||||
name: "{{ nname }}"
|
name: "{{ nname }}"
|
||||||
register: result
|
register: result
|
||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- "not result.exists"
|
- "not result.exists"
|
||||||
- "'network' in result"
|
- "'network' in result"
|
||||||
- "result.network is none"
|
- "result.network is none"
|
||||||
|
|
||||||
- name: Make sure network exists
|
- name: Make sure network exists
|
||||||
docker_network:
|
docker_network:
|
||||||
name: "{{ nname }}"
|
name: "{{ nname }}"
|
||||||
state: present
|
state: present
|
||||||
|
|
||||||
- name: Inspect a present network
|
- name: Inspect a present network
|
||||||
docker_network_info:
|
docker_network_info:
|
||||||
name: "{{ nname }}"
|
name: "{{ nname }}"
|
||||||
register: result
|
register: result
|
||||||
- name: Dump docker_network_info result
|
- name: Dump docker_network_info result
|
||||||
debug: var=result
|
debug: var=result
|
||||||
|
|
||||||
- name: "Comparison: use 'docker network inspect'"
|
- name: "Comparison: use 'docker network inspect'"
|
||||||
command: docker network inspect "{{ nname }}"
|
command: docker network inspect "{{ nname }}"
|
||||||
register: docker_inspect
|
register: docker_inspect
|
||||||
ignore_errors: true
|
ignore_errors: true
|
||||||
- block:
|
- block:
|
||||||
- set_fact:
|
- set_fact:
|
||||||
docker_inspect_result: "{{ docker_inspect.stdout | from_json }}"
|
docker_inspect_result: "{{ docker_inspect.stdout | from_json }}"
|
||||||
- name: Dump docker inspect result
|
- name: Dump docker inspect result
|
||||||
debug: var=docker_inspect_result
|
debug: var=docker_inspect_result
|
||||||
when: docker_inspect is not failed
|
when: docker_inspect is not failed
|
||||||
|
|
||||||
- name: Cleanup
|
- name: Cleanup
|
||||||
docker_network:
|
docker_network:
|
||||||
name: "{{ nname }}"
|
name: "{{ nname }}"
|
||||||
state: absent
|
state: absent
|
||||||
force: true
|
force: true
|
||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- result.exists
|
- result.exists
|
||||||
- "'network' in result"
|
- "'network' in result"
|
||||||
- "result.network is truthy"
|
- "result.network is truthy"
|
||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- "result.network == docker_inspect_result[0]"
|
- "result.network == docker_inspect_result[0]"
|
||||||
when: docker_inspect is not failed
|
when: docker_inspect is not failed
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- "'is too new. Maximum supported API version is' in docker_inspect.stderr"
|
- "'is too new. Maximum supported API version is' in docker_inspect.stderr"
|
||||||
when: docker_inspect is failed
|
when: docker_inspect is failed
|
||||||
|
|
||||||
when: docker_api_version is version('1.25', '>=')
|
when: docker_api_version is version('1.25', '>=')
|
||||||
|
|
||||||
|
|||||||
@ -10,30 +10,30 @@
|
|||||||
|
|
||||||
# Run the tests
|
# Run the tests
|
||||||
- block:
|
- block:
|
||||||
- include_tasks: test_node.yml
|
- include_tasks: test_node.yml
|
||||||
|
|
||||||
always:
|
always:
|
||||||
- name: Cleanup (trying)
|
- name: Cleanup (trying)
|
||||||
docker_swarm:
|
docker_swarm:
|
||||||
state: absent
|
state: absent
|
||||||
force: true
|
force: true
|
||||||
diff: false
|
diff: false
|
||||||
ignore_errors: true
|
ignore_errors: true
|
||||||
|
|
||||||
- name: Restart docker daemon
|
- name: Restart docker daemon
|
||||||
service:
|
service:
|
||||||
name: docker
|
name: docker
|
||||||
state: restarted
|
state: restarted
|
||||||
become: true
|
become: true
|
||||||
- name: Wait for docker daemon to be fully restarted
|
- name: Wait for docker daemon to be fully restarted
|
||||||
command: docker ps
|
command: docker ps
|
||||||
ignore_errors: true
|
ignore_errors: true
|
||||||
|
|
||||||
- name: Cleanup
|
- name: Cleanup
|
||||||
docker_swarm:
|
docker_swarm:
|
||||||
state: absent
|
state: absent
|
||||||
force: true
|
force: true
|
||||||
diff: false
|
diff: false
|
||||||
|
|
||||||
when: docker_py_version is version('2.4.0', '>=') and docker_api_version is version('1.25', '>=')
|
when: docker_py_version is version('2.4.0', '>=') and docker_api_version is version('1.25', '>=')
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -4,89 +4,89 @@
|
|||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
- block:
|
- block:
|
||||||
- name: Make sure we're not already using Docker swarm
|
- name: Make sure we're not already using Docker swarm
|
||||||
docker_swarm:
|
docker_swarm:
|
||||||
state: absent
|
state: absent
|
||||||
force: true
|
force: true
|
||||||
|
|
||||||
- name: Try to get docker_node_info when docker is not running in swarm mode
|
- name: Try to get docker_node_info when docker is not running in swarm mode
|
||||||
docker_node_info:
|
docker_node_info:
|
||||||
ignore_errors: true
|
ignore_errors: true
|
||||||
register: output
|
register: output
|
||||||
|
|
||||||
- name: assert failure when called when swarm is not in use or not run on manager node
|
- name: assert failure when called when swarm is not in use or not run on manager node
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- 'output is failed'
|
- 'output is failed'
|
||||||
- 'output.msg == "Error running docker swarm module: must run on swarm manager node"'
|
- 'output.msg == "Error running docker swarm module: must run on swarm manager node"'
|
||||||
|
|
||||||
- name: Create a Swarm cluster
|
- name: Create a Swarm cluster
|
||||||
docker_swarm:
|
docker_swarm:
|
||||||
state: present
|
state: present
|
||||||
advertise_addr: "{{ansible_default_ipv4.address | default('127.0.0.1')}}"
|
advertise_addr: "{{ansible_default_ipv4.address | default('127.0.0.1')}}"
|
||||||
register: output
|
register: output
|
||||||
|
|
||||||
- name: assert changed when create a new swarm cluster
|
- name: assert changed when create a new swarm cluster
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- 'output is changed'
|
- 'output is changed'
|
||||||
- '(output.actions[0] | regex_search("New Swarm cluster created: ")) is truthy'
|
- '(output.actions[0] | regex_search("New Swarm cluster created: ")) is truthy'
|
||||||
- 'output.swarm_facts.JoinTokens.Manager is truthy'
|
- 'output.swarm_facts.JoinTokens.Manager is truthy'
|
||||||
- 'output.swarm_facts.JoinTokens.Worker is truthy'
|
- 'output.swarm_facts.JoinTokens.Worker is truthy'
|
||||||
|
|
||||||
- name: Try to get docker_node_info when docker is running in swarm mode and as manager
|
- name: Try to get docker_node_info when docker is running in swarm mode and as manager
|
||||||
docker_node_info:
|
docker_node_info:
|
||||||
register: output
|
register: output
|
||||||
|
|
||||||
- name: assert reading docker swarm node facts
|
- name: assert reading docker swarm node facts
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- 'output.nodes | length > 0'
|
- 'output.nodes | length > 0'
|
||||||
- 'output.nodes[0].ID is string'
|
- 'output.nodes[0].ID is string'
|
||||||
|
|
||||||
- name: Try to get docker_node_info using the self parameter
|
- name: Try to get docker_node_info using the self parameter
|
||||||
docker_node_info:
|
docker_node_info:
|
||||||
self: true
|
self: true
|
||||||
register: output
|
register: output
|
||||||
|
|
||||||
- name: assert reading swarm facts with list of nodes option
|
- name: assert reading swarm facts with list of nodes option
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- 'output.nodes | length == 1'
|
- 'output.nodes | length == 1'
|
||||||
- 'output.nodes[0].ID is string'
|
- 'output.nodes[0].ID is string'
|
||||||
|
|
||||||
- name: Get local docker node name
|
- name: Get local docker node name
|
||||||
set_fact:
|
set_fact:
|
||||||
localnodename: "{{ output.nodes[0].Description.Hostname }}"
|
localnodename: "{{ output.nodes[0].Description.Hostname }}"
|
||||||
|
|
||||||
|
|
||||||
- name: Try to get docker_node_info using the local node name as parameter
|
- name: Try to get docker_node_info using the local node name as parameter
|
||||||
docker_node_info:
|
docker_node_info:
|
||||||
name: "{{ localnodename }}"
|
name: "{{ localnodename }}"
|
||||||
register: output
|
register: output
|
||||||
|
|
||||||
- name: assert reading reading swarm facts and using node filter (random node name)
|
- name: assert reading reading swarm facts and using node filter (random node name)
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- 'output.nodes | length == 1'
|
- 'output.nodes | length == 1'
|
||||||
- 'output.nodes[0].ID is string'
|
- 'output.nodes[0].ID is string'
|
||||||
|
|
||||||
- name: Create random name
|
- name: Create random name
|
||||||
set_fact:
|
set_fact:
|
||||||
randomnodename: "{{ 'node-%0x' % ((2**32) | random) }}"
|
randomnodename: "{{ 'node-%0x' % ((2**32) | random) }}"
|
||||||
|
|
||||||
- name: Try to get docker_node_info using random node name as parameter
|
- name: Try to get docker_node_info using random node name as parameter
|
||||||
docker_node_info:
|
docker_node_info:
|
||||||
name: "{{ randomnodename }}"
|
name: "{{ randomnodename }}"
|
||||||
register: output
|
register: output
|
||||||
|
|
||||||
- name: assert reading reading swarm facts and using node filter (random node name)
|
- name: assert reading reading swarm facts and using node filter (random node name)
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- 'output.nodes | length == 0'
|
- 'output.nodes | length == 0'
|
||||||
|
|
||||||
always:
|
always:
|
||||||
- name: Cleanup
|
- name: Cleanup
|
||||||
docker_swarm:
|
docker_swarm:
|
||||||
state: absent
|
state: absent
|
||||||
force: true
|
force: true
|
||||||
|
|||||||
@ -126,22 +126,22 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- create_1_check is changed
|
- create_1_check is changed
|
||||||
- create_1 is changed
|
- create_1 is changed
|
||||||
- create_2_check is not changed
|
- create_2_check is not changed
|
||||||
- create_2 is not changed
|
- create_2 is not changed
|
||||||
- create_3_check is changed
|
- create_3_check is changed
|
||||||
- create_3 is changed
|
- create_3 is changed
|
||||||
- create_4_check is not changed
|
- create_4_check is not changed
|
||||||
- create_4 is not changed
|
- create_4 is not changed
|
||||||
- absent_1_check is changed
|
- absent_1_check is changed
|
||||||
- absent_1 is changed
|
- absent_1 is changed
|
||||||
- absent_2_check is not changed
|
- absent_2_check is not changed
|
||||||
- absent_2 is not changed
|
- absent_2 is not changed
|
||||||
- absent_3_check is changed
|
- absent_3_check is changed
|
||||||
- absent_3 is changed
|
- absent_3 is changed
|
||||||
- absent_4_check is not changed
|
- absent_4_check is not changed
|
||||||
- absent_4 is not changed
|
- absent_4 is not changed
|
||||||
|
|
||||||
############ Plugin_Options ############
|
############ Plugin_Options ############
|
||||||
########################################
|
########################################
|
||||||
@ -186,7 +186,7 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- create_1 is changed
|
- create_1 is changed
|
||||||
- create_2 is not changed
|
- create_2 is not changed
|
||||||
- update_1 is changed
|
- update_1 is changed
|
||||||
- update_2 is not changed
|
- update_2 is not changed
|
||||||
|
|||||||
@ -66,14 +66,14 @@
|
|||||||
|
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- create_1 is changed
|
- create_1 is changed
|
||||||
- create_2 is not changed
|
- create_2 is not changed
|
||||||
- create_3 is changed
|
- create_3 is changed
|
||||||
- create_4 is not changed
|
- create_4 is not changed
|
||||||
- absent_1 is changed
|
- absent_1 is changed
|
||||||
- absent_2 is not changed
|
- absent_2 is not changed
|
||||||
- absent_3 is changed
|
- absent_3 is changed
|
||||||
- absent_4 is not changed
|
- absent_4 is not changed
|
||||||
|
|
||||||
- name: Cleanup plugin with an alias
|
- name: Cleanup plugin with an alias
|
||||||
docker_plugin:
|
docker_plugin:
|
||||||
|
|||||||
@ -15,159 +15,159 @@
|
|||||||
vname: "{{ 'ansible-volume-%0x' % ((2**32) | random) }}"
|
vname: "{{ 'ansible-volume-%0x' % ((2**32) | random) }}"
|
||||||
|
|
||||||
- block:
|
- block:
|
||||||
# Create objects to be pruned
|
# Create objects to be pruned
|
||||||
- name: Create container (without volume)
|
- name: Create container (without volume)
|
||||||
docker_container:
|
docker_container:
|
||||||
name: "{{ cname }}"
|
name: "{{ cname }}"
|
||||||
image: "{{ docker_test_image_hello_world }}"
|
image: "{{ docker_test_image_hello_world }}"
|
||||||
state: present
|
state: present
|
||||||
register: container
|
register: container
|
||||||
- name: Create network
|
- name: Create network
|
||||||
docker_network:
|
docker_network:
|
||||||
name: "{{ nname }}"
|
name: "{{ nname }}"
|
||||||
state: present
|
state: present
|
||||||
register: network
|
register: network
|
||||||
- name: Create named volume
|
- name: Create named volume
|
||||||
docker_volume:
|
docker_volume:
|
||||||
name: "{{ vname }}"
|
name: "{{ vname }}"
|
||||||
state: present
|
state: present
|
||||||
register: volume
|
register: volume
|
||||||
- name: Create anonymous volume
|
- name: Create anonymous volume
|
||||||
command: docker volume create
|
command: docker volume create
|
||||||
register: volume_anon
|
register: volume_anon
|
||||||
|
|
||||||
- name: List volumes
|
- name: List volumes
|
||||||
command: docker volume list
|
command: docker volume list
|
||||||
|
|
||||||
# Prune objects
|
# Prune objects
|
||||||
- name: Prune everything
|
- name: Prune everything
|
||||||
docker_prune:
|
|
||||||
containers: true
|
|
||||||
images: true
|
|
||||||
networks: true
|
|
||||||
volumes: true
|
|
||||||
builder_cache: true
|
|
||||||
register: result
|
|
||||||
|
|
||||||
# Analyze result
|
|
||||||
- name: Show results
|
|
||||||
debug:
|
|
||||||
var: result
|
|
||||||
- name: General checks
|
|
||||||
assert:
|
|
||||||
that:
|
|
||||||
- result is changed
|
|
||||||
# containers
|
|
||||||
- container.container.Id in result.containers
|
|
||||||
- "'containers_space_reclaimed' in result"
|
|
||||||
# images
|
|
||||||
- "'images_space_reclaimed' in result"
|
|
||||||
# networks
|
|
||||||
- network.network.Name in result.networks
|
|
||||||
# volumes
|
|
||||||
- volume_anon.stdout in result.volumes
|
|
||||||
- "'volumes_space_reclaimed' in result"
|
|
||||||
# builder_cache
|
|
||||||
- "'builder_cache_space_reclaimed' in result"
|
|
||||||
- name: API-version specific volumes check (API version before 1.42)
|
|
||||||
assert:
|
|
||||||
that:
|
|
||||||
# For API version 1.41 and before, pruning always considers all volumes
|
|
||||||
- volume.volume.Name in result.volumes
|
|
||||||
when: docker_api_version is version('1.42', '<')
|
|
||||||
- name: API-version specific volumes check (API version 1.42+)
|
|
||||||
assert:
|
|
||||||
that:
|
|
||||||
# For API version 1.41 and before, pruning considers only anonymous volumes,
|
|
||||||
# so our named container is not removed
|
|
||||||
- volume.volume.Name not in result.volumes
|
|
||||||
when: docker_api_version is version('1.42', '>=')
|
|
||||||
|
|
||||||
# Prune objects again
|
|
||||||
- name: Prune everything again (should have no change)
|
|
||||||
docker_prune:
|
|
||||||
containers: true
|
|
||||||
images: true
|
|
||||||
networks: true
|
|
||||||
volumes: true
|
|
||||||
builder_cache: true
|
|
||||||
register: result
|
|
||||||
|
|
||||||
# Analyze result
|
|
||||||
- name: Show results
|
|
||||||
debug:
|
|
||||||
var: result
|
|
||||||
- name: General checks
|
|
||||||
assert:
|
|
||||||
that:
|
|
||||||
- result is not changed
|
|
||||||
# containers
|
|
||||||
- result.containers == []
|
|
||||||
- result.containers_space_reclaimed == 0
|
|
||||||
# images
|
|
||||||
- result.images == []
|
|
||||||
- result.images_space_reclaimed == 0
|
|
||||||
# networks
|
|
||||||
- result.networks == []
|
|
||||||
# volumes
|
|
||||||
- result.volumes == []
|
|
||||||
# builder_cache
|
|
||||||
- result.builder_cache_space_reclaimed == 0
|
|
||||||
|
|
||||||
# Test with filters
|
|
||||||
- name: Prune with filters
|
|
||||||
docker_prune:
|
|
||||||
images: true
|
|
||||||
images_filters:
|
|
||||||
dangling: true
|
|
||||||
register: result
|
|
||||||
|
|
||||||
- name: Show results
|
|
||||||
debug:
|
|
||||||
var: result
|
|
||||||
|
|
||||||
- name: Prune build cache (API version 1.39+)
|
|
||||||
when: docker_api_version is version('1.39', '>=')
|
|
||||||
block:
|
|
||||||
- name: Prune build cache with option
|
|
||||||
docker_prune:
|
|
||||||
builder_cache: true
|
|
||||||
builder_cache_all: true
|
|
||||||
builder_cache_filters:
|
|
||||||
until: 10m
|
|
||||||
builder_cache_keep_storage: 1MB
|
|
||||||
register: result
|
|
||||||
|
|
||||||
- name: Show results
|
|
||||||
debug:
|
|
||||||
var: result
|
|
||||||
|
|
||||||
- name: Check results
|
|
||||||
assert:
|
|
||||||
that:
|
|
||||||
- "'builder_cache_space_reclaimed' in result"
|
|
||||||
- "'builder_cache_caches_deleted' in result"
|
|
||||||
|
|
||||||
- name: Prune volumes with all filter (API version 1.42+)
|
|
||||||
when: docker_api_version is version('1.42', '>=')
|
|
||||||
block:
|
|
||||||
- name: Prune with filters
|
|
||||||
docker_prune:
|
docker_prune:
|
||||||
|
containers: true
|
||||||
|
images: true
|
||||||
|
networks: true
|
||||||
volumes: true
|
volumes: true
|
||||||
volumes_filters:
|
builder_cache: true
|
||||||
all: true
|
|
||||||
register: result
|
register: result
|
||||||
|
|
||||||
|
# Analyze result
|
||||||
- name: Show results
|
- name: Show results
|
||||||
debug:
|
debug:
|
||||||
var: result
|
var: result
|
||||||
|
- name: General checks
|
||||||
- name: Check results
|
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- result is changed
|
- result is changed
|
||||||
- volume.volume.Name in result.volumes
|
# containers
|
||||||
|
- container.container.Id in result.containers
|
||||||
|
- "'containers_space_reclaimed' in result"
|
||||||
|
# images
|
||||||
|
- "'images_space_reclaimed' in result"
|
||||||
|
# networks
|
||||||
|
- network.network.Name in result.networks
|
||||||
|
# volumes
|
||||||
|
- volume_anon.stdout in result.volumes
|
||||||
- "'volumes_space_reclaimed' in result"
|
- "'volumes_space_reclaimed' in result"
|
||||||
|
# builder_cache
|
||||||
|
- "'builder_cache_space_reclaimed' in result"
|
||||||
|
- name: API-version specific volumes check (API version before 1.42)
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
# For API version 1.41 and before, pruning always considers all volumes
|
||||||
|
- volume.volume.Name in result.volumes
|
||||||
|
when: docker_api_version is version('1.42', '<')
|
||||||
|
- name: API-version specific volumes check (API version 1.42+)
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
# For API version 1.41 and before, pruning considers only anonymous volumes,
|
||||||
|
# so our named container is not removed
|
||||||
|
- volume.volume.Name not in result.volumes
|
||||||
|
when: docker_api_version is version('1.42', '>=')
|
||||||
|
|
||||||
|
# Prune objects again
|
||||||
|
- name: Prune everything again (should have no change)
|
||||||
|
docker_prune:
|
||||||
|
containers: true
|
||||||
|
images: true
|
||||||
|
networks: true
|
||||||
|
volumes: true
|
||||||
|
builder_cache: true
|
||||||
|
register: result
|
||||||
|
|
||||||
|
# Analyze result
|
||||||
|
- name: Show results
|
||||||
|
debug:
|
||||||
|
var: result
|
||||||
|
- name: General checks
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- result is not changed
|
||||||
|
# containers
|
||||||
|
- result.containers == []
|
||||||
|
- result.containers_space_reclaimed == 0
|
||||||
|
# images
|
||||||
|
- result.images == []
|
||||||
|
- result.images_space_reclaimed == 0
|
||||||
|
# networks
|
||||||
|
- result.networks == []
|
||||||
|
# volumes
|
||||||
|
- result.volumes == []
|
||||||
|
# builder_cache
|
||||||
|
- result.builder_cache_space_reclaimed == 0
|
||||||
|
|
||||||
|
# Test with filters
|
||||||
|
- name: Prune with filters
|
||||||
|
docker_prune:
|
||||||
|
images: true
|
||||||
|
images_filters:
|
||||||
|
dangling: true
|
||||||
|
register: result
|
||||||
|
|
||||||
|
- name: Show results
|
||||||
|
debug:
|
||||||
|
var: result
|
||||||
|
|
||||||
|
- name: Prune build cache (API version 1.39+)
|
||||||
|
when: docker_api_version is version('1.39', '>=')
|
||||||
|
block:
|
||||||
|
- name: Prune build cache with option
|
||||||
|
docker_prune:
|
||||||
|
builder_cache: true
|
||||||
|
builder_cache_all: true
|
||||||
|
builder_cache_filters:
|
||||||
|
until: 10m
|
||||||
|
builder_cache_keep_storage: 1MB
|
||||||
|
register: result
|
||||||
|
|
||||||
|
- name: Show results
|
||||||
|
debug:
|
||||||
|
var: result
|
||||||
|
|
||||||
|
- name: Check results
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- "'builder_cache_space_reclaimed' in result"
|
||||||
|
- "'builder_cache_caches_deleted' in result"
|
||||||
|
|
||||||
|
- name: Prune volumes with all filter (API version 1.42+)
|
||||||
|
when: docker_api_version is version('1.42', '>=')
|
||||||
|
block:
|
||||||
|
- name: Prune with filters
|
||||||
|
docker_prune:
|
||||||
|
volumes: true
|
||||||
|
volumes_filters:
|
||||||
|
all: true
|
||||||
|
register: result
|
||||||
|
|
||||||
|
- name: Show results
|
||||||
|
debug:
|
||||||
|
var: result
|
||||||
|
|
||||||
|
- name: Check results
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- result is changed
|
||||||
|
- volume.volume.Name in result.volumes
|
||||||
|
- "'volumes_space_reclaimed' in result"
|
||||||
|
|
||||||
when: docker_api_version is version('1.25', '>=')
|
when: docker_api_version is version('1.25', '>=')
|
||||||
|
|
||||||
|
|||||||
@ -4,219 +4,219 @@
|
|||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
- block:
|
- block:
|
||||||
- name: Make sure we're not already using Docker swarm
|
- name: Make sure we're not already using Docker swarm
|
||||||
docker_swarm:
|
docker_swarm:
|
||||||
state: absent
|
state: absent
|
||||||
force: true
|
force: true
|
||||||
|
|
||||||
- name: Create a Swarm cluster
|
- name: Create a Swarm cluster
|
||||||
docker_swarm:
|
docker_swarm:
|
||||||
state: present
|
state: present
|
||||||
advertise_addr: "{{ ansible_default_ipv4.address | default('127.0.0.1') }}"
|
advertise_addr: "{{ ansible_default_ipv4.address | default('127.0.0.1') }}"
|
||||||
|
|
||||||
- name: Parameter name should be required
|
- name: Parameter name should be required
|
||||||
docker_secret:
|
docker_secret:
|
||||||
state: present
|
state: present
|
||||||
ignore_errors: true
|
ignore_errors: true
|
||||||
register: output
|
register: output
|
||||||
|
|
||||||
- name: assert failure when called with no name
|
- name: assert failure when called with no name
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- 'output.failed'
|
- 'output.failed'
|
||||||
- 'output.msg == "missing required arguments: name"'
|
- 'output.msg == "missing required arguments: name"'
|
||||||
|
|
||||||
- name: Test parameters
|
- name: Test parameters
|
||||||
docker_secret:
|
docker_secret:
|
||||||
name: foo
|
name: foo
|
||||||
state: present
|
state: present
|
||||||
ignore_errors: true
|
ignore_errors: true
|
||||||
register: output
|
register: output
|
||||||
|
|
||||||
- name: assert failure when called with no data
|
- name: assert failure when called with no data
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- 'output.failed'
|
- 'output.failed'
|
||||||
- 'output.msg == "state is present but any of the following are missing: data, data_src"'
|
- 'output.msg == "state is present but any of the following are missing: data, data_src"'
|
||||||
|
|
||||||
- name: Create secret
|
- name: Create secret
|
||||||
docker_secret:
|
docker_secret:
|
||||||
name: db_password
|
name: db_password
|
||||||
data: opensesame!
|
data: opensesame!
|
||||||
state: present
|
state: present
|
||||||
register: output
|
register: output
|
||||||
|
|
||||||
- name: Create variable secret_id
|
- name: Create variable secret_id
|
||||||
set_fact:
|
set_fact:
|
||||||
secret_id: "{{ output.secret_id }}"
|
secret_id: "{{ output.secret_id }}"
|
||||||
|
|
||||||
- name: Inspect secret
|
- name: Inspect secret
|
||||||
command: "docker secret inspect {{ secret_id }}"
|
command: "docker secret inspect {{ secret_id }}"
|
||||||
register: inspect
|
register: inspect
|
||||||
ignore_errors: true
|
ignore_errors: true
|
||||||
|
|
||||||
- debug: var=inspect
|
- debug: var=inspect
|
||||||
|
|
||||||
- name: assert secret creation succeeded
|
- name: assert secret creation succeeded
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- "'db_password' in inspect.stdout"
|
- "'db_password' in inspect.stdout"
|
||||||
- "'ansible_key' in inspect.stdout"
|
- "'ansible_key' in inspect.stdout"
|
||||||
when: inspect is not failed
|
when: inspect is not failed
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- "'is too new. Maximum supported API version is' in inspect.stderr"
|
- "'is too new. Maximum supported API version is' in inspect.stderr"
|
||||||
when: inspect is failed
|
when: inspect is failed
|
||||||
|
|
||||||
- name: Create secret again
|
- name: Create secret again
|
||||||
docker_secret:
|
docker_secret:
|
||||||
name: db_password
|
name: db_password
|
||||||
data: opensesame!
|
data: opensesame!
|
||||||
state: present
|
state: present
|
||||||
register: output
|
register: output
|
||||||
|
|
||||||
- name: assert create secret is idempotent
|
- name: assert create secret is idempotent
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- not output.changed
|
- not output.changed
|
||||||
|
|
||||||
- name: Write secret into file
|
- name: Write secret into file
|
||||||
copy:
|
copy:
|
||||||
dest: "{{ remote_tmp_dir }}/data"
|
dest: "{{ remote_tmp_dir }}/data"
|
||||||
content: |-
|
content: |-
|
||||||
opensesame!
|
opensesame!
|
||||||
|
|
||||||
- name: Create secret again (from file)
|
- name: Create secret again (from file)
|
||||||
docker_secret:
|
docker_secret:
|
||||||
name: db_password
|
name: db_password
|
||||||
data_src: "{{ remote_tmp_dir }}/data"
|
data_src: "{{ remote_tmp_dir }}/data"
|
||||||
state: present
|
state: present
|
||||||
register: output
|
register: output
|
||||||
|
|
||||||
- name: assert create secret is idempotent
|
- name: assert create secret is idempotent
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- not output.changed
|
- not output.changed
|
||||||
|
|
||||||
- name: Create secret again (base64)
|
- name: Create secret again (base64)
|
||||||
docker_secret:
|
docker_secret:
|
||||||
name: db_password
|
name: db_password
|
||||||
data: b3BlbnNlc2FtZSE=
|
data: b3BlbnNlc2FtZSE=
|
||||||
data_is_b64: true
|
data_is_b64: true
|
||||||
state: present
|
state: present
|
||||||
register: output
|
register: output
|
||||||
|
|
||||||
- name: assert create secret (base64) is idempotent
|
- name: assert create secret (base64) is idempotent
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- not output.changed
|
- not output.changed
|
||||||
|
|
||||||
- name: Update secret
|
- name: Update secret
|
||||||
docker_secret:
|
docker_secret:
|
||||||
name: db_password
|
name: db_password
|
||||||
data: newpassword!
|
data: newpassword!
|
||||||
state: present
|
state: present
|
||||||
register: output
|
register: output
|
||||||
|
|
||||||
- name: assert secret was updated
|
- name: assert secret was updated
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- output.changed
|
- output.changed
|
||||||
- output.secret_id != secret_id
|
- output.secret_id != secret_id
|
||||||
|
|
||||||
- name: Remove secret
|
- name: Remove secret
|
||||||
docker_secret:
|
docker_secret:
|
||||||
name: db_password
|
name: db_password
|
||||||
state: absent
|
state: absent
|
||||||
|
|
||||||
- name: Check that secret is removed
|
- name: Check that secret is removed
|
||||||
command: "docker secret inspect {{ secret_id }}"
|
command: "docker secret inspect {{ secret_id }}"
|
||||||
register: output
|
register: output
|
||||||
ignore_errors: true
|
ignore_errors: true
|
||||||
|
|
||||||
- name: assert secret was removed
|
- name: assert secret was removed
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- output.failed
|
- output.failed
|
||||||
|
|
||||||
# Rolling update
|
# Rolling update
|
||||||
|
|
||||||
- name: Create rolling secret
|
- name: Create rolling secret
|
||||||
docker_secret:
|
docker_secret:
|
||||||
name: rolling_password
|
name: rolling_password
|
||||||
data: opensesame!
|
data: opensesame!
|
||||||
rolling_versions: true
|
rolling_versions: true
|
||||||
state: present
|
state: present
|
||||||
register: original_output
|
register: original_output
|
||||||
|
|
||||||
- name: Create variable secret_id
|
- name: Create variable secret_id
|
||||||
set_fact:
|
set_fact:
|
||||||
secret_id: "{{ original_output.secret_id }}"
|
secret_id: "{{ original_output.secret_id }}"
|
||||||
|
|
||||||
- name: Inspect secret
|
- name: Inspect secret
|
||||||
command: "docker secret inspect {{ secret_id }}"
|
command: "docker secret inspect {{ secret_id }}"
|
||||||
register: inspect
|
register: inspect
|
||||||
ignore_errors: true
|
ignore_errors: true
|
||||||
|
|
||||||
- debug: var=inspect
|
- debug: var=inspect
|
||||||
|
|
||||||
- name: assert secret creation succeeded
|
- name: assert secret creation succeeded
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- "'rolling_password' in inspect.stdout"
|
- "'rolling_password' in inspect.stdout"
|
||||||
- "'ansible_key' in inspect.stdout"
|
- "'ansible_key' in inspect.stdout"
|
||||||
- "'ansible_version' in inspect.stdout"
|
- "'ansible_version' in inspect.stdout"
|
||||||
- original_output.secret_name == 'rolling_password_v1'
|
- original_output.secret_name == 'rolling_password_v1'
|
||||||
when: inspect is not failed
|
when: inspect is not failed
|
||||||
- assert:
|
- assert:
|
||||||
that:
|
that:
|
||||||
- "'is too new. Maximum supported API version is' in inspect.stderr"
|
- "'is too new. Maximum supported API version is' in inspect.stderr"
|
||||||
when: inspect is failed
|
when: inspect is failed
|
||||||
|
|
||||||
- name: Create secret again
|
- name: Create secret again
|
||||||
docker_secret:
|
docker_secret:
|
||||||
name: rolling_password
|
name: rolling_password
|
||||||
data: newpassword!
|
data: newpassword!
|
||||||
rolling_versions: true
|
rolling_versions: true
|
||||||
state: present
|
state: present
|
||||||
register: new_output
|
register: new_output
|
||||||
|
|
||||||
- name: assert that new version is created
|
- name: assert that new version is created
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- new_output.changed
|
- new_output.changed
|
||||||
- new_output.secret_id != original_output.secret_id
|
- new_output.secret_id != original_output.secret_id
|
||||||
- new_output.secret_name != original_output.secret_name
|
- new_output.secret_name != original_output.secret_name
|
||||||
- new_output.secret_name == 'rolling_password_v2'
|
- new_output.secret_name == 'rolling_password_v2'
|
||||||
|
|
||||||
- name: Remove rolling secrets
|
- name: Remove rolling secrets
|
||||||
docker_secret:
|
docker_secret:
|
||||||
name: rolling_password
|
name: rolling_password
|
||||||
rolling_versions: true
|
rolling_versions: true
|
||||||
state: absent
|
state: absent
|
||||||
|
|
||||||
- name: Check that secret is removed
|
- name: Check that secret is removed
|
||||||
command: "docker secret inspect {{ original_output.secret_id }}"
|
command: "docker secret inspect {{ original_output.secret_id }}"
|
||||||
register: output
|
register: output
|
||||||
ignore_errors: true
|
ignore_errors: true
|
||||||
|
|
||||||
- name: assert secret was removed
|
- name: assert secret was removed
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- output.failed
|
- output.failed
|
||||||
|
|
||||||
- name: Check that secret is removed
|
- name: Check that secret is removed
|
||||||
command: "docker secret inspect {{ new_output.secret_id }}"
|
command: "docker secret inspect {{ new_output.secret_id }}"
|
||||||
register: output
|
register: output
|
||||||
ignore_errors: true
|
ignore_errors: true
|
||||||
|
|
||||||
- name: assert secret was removed
|
- name: assert secret was removed
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- output.failed
|
- output.failed
|
||||||
|
|
||||||
always:
|
always:
|
||||||
- name: Remove Swarm cluster
|
- name: Remove Swarm cluster
|
||||||
docker_swarm:
|
docker_swarm:
|
||||||
state: absent
|
state: absent
|
||||||
force: true
|
force: true
|
||||||
|
|||||||
@ -4,114 +4,114 @@
|
|||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
- block:
|
- block:
|
||||||
- name: Make sure we're not already using Docker swarm
|
- name: Make sure we're not already using Docker swarm
|
||||||
docker_swarm:
|
docker_swarm:
|
||||||
state: absent
|
state: absent
|
||||||
force: true
|
force: true
|
||||||
|
|
||||||
- name: Create a Swarm cluster
|
- name: Create a Swarm cluster
|
||||||
docker_swarm:
|
docker_swarm:
|
||||||
state: present
|
state: present
|
||||||
advertise_addr: "{{ ansible_default_ipv4.address | default('127.0.0.1') }}"
|
advertise_addr: "{{ ansible_default_ipv4.address | default('127.0.0.1') }}"
|
||||||
|
|
||||||
- name: install docker_stack python requirements
|
- name: install docker_stack python requirements
|
||||||
pip:
|
pip:
|
||||||
name: jsondiff,pyyaml
|
name: jsondiff,pyyaml
|
||||||
|
|
||||||
- name: Create a stack without name
|
- name: Create a stack without name
|
||||||
register: output
|
register: output
|
||||||
docker_stack:
|
docker_stack:
|
||||||
state: present
|
state: present
|
||||||
ignore_errors: true
|
ignore_errors: true
|
||||||
|
|
||||||
- name: assert failure when name not set
|
- name: assert failure when name not set
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- output is failed
|
- output is failed
|
||||||
- 'output.msg == "missing required arguments: name"'
|
- 'output.msg == "missing required arguments: name"'
|
||||||
|
|
||||||
- name: Create a stack without compose
|
- name: Create a stack without compose
|
||||||
register: output
|
register: output
|
||||||
docker_stack:
|
docker_stack:
|
||||||
name: test_stack
|
name: test_stack
|
||||||
ignore_errors: true
|
ignore_errors: true
|
||||||
|
|
||||||
- name: assert failure when compose not set
|
- name: assert failure when compose not set
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- output is failed
|
- output is failed
|
||||||
- 'output.msg == "compose parameter must be a list containing at least one element"'
|
- 'output.msg == "compose parameter must be a list containing at least one element"'
|
||||||
|
|
||||||
- name: Ensure stack is absent
|
- name: Ensure stack is absent
|
||||||
register: output
|
register: output
|
||||||
docker_stack:
|
docker_stack:
|
||||||
state: absent
|
state: absent
|
||||||
name: test_stack
|
name: test_stack
|
||||||
absent_retries: 30
|
absent_retries: 30
|
||||||
|
|
||||||
- name: Template compose files
|
- name: Template compose files
|
||||||
template:
|
template:
|
||||||
src: "{{item}}"
|
src: "{{item}}"
|
||||||
dest: "{{remote_tmp_dir}}/"
|
dest: "{{remote_tmp_dir}}/"
|
||||||
with_items:
|
with_items:
|
||||||
- stack_compose_base.yml
|
- stack_compose_base.yml
|
||||||
- stack_compose_overrides.yml
|
- stack_compose_overrides.yml
|
||||||
|
|
||||||
- name: Create stack with compose file
|
- name: Create stack with compose file
|
||||||
register: output
|
register: output
|
||||||
docker_stack:
|
docker_stack:
|
||||||
state: present
|
state: present
|
||||||
name: test_stack
|
name: test_stack
|
||||||
compose:
|
compose:
|
||||||
- "{{remote_tmp_dir}}/stack_compose_base.yml"
|
- "{{remote_tmp_dir}}/stack_compose_base.yml"
|
||||||
|
|
||||||
- name: assert test_stack changed on stack creation with compose file
|
- name: assert test_stack changed on stack creation with compose file
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- output is changed
|
- output is changed
|
||||||
|
|
||||||
# FIXME: updating the stack prevents leaving the swarm on Shippable
|
# FIXME: updating the stack prevents leaving the swarm on Shippable
|
||||||
#- name: Update stack with YAML
|
# - name: Update stack with YAML
|
||||||
# register: output
|
# register: output
|
||||||
# docker_stack:
|
# docker_stack:
|
||||||
# state: present
|
# state: present
|
||||||
# name: test_stack
|
# name: test_stack
|
||||||
# compose:
|
# compose:
|
||||||
# - "{{stack_compose_base}}"
|
# - "{{stack_compose_base}}"
|
||||||
# - "{{stack_compose_overrides}}"
|
# - "{{stack_compose_overrides}}"
|
||||||
#
|
#
|
||||||
#- name: assert test_stack correctly changed on update with yaml
|
# - name: assert test_stack correctly changed on update with yaml
|
||||||
# assert:
|
# assert:
|
||||||
# that:
|
# that:
|
||||||
# - output is changed
|
# - output is changed
|
||||||
# - output.stack_spec_diff == stack_update_expected_diff
|
# - output.stack_spec_diff == stack_update_expected_diff
|
||||||
|
|
||||||
- name: Delete stack
|
- name: Delete stack
|
||||||
register: output
|
register: output
|
||||||
docker_stack:
|
docker_stack:
|
||||||
state: absent
|
state: absent
|
||||||
name: test_stack
|
name: test_stack
|
||||||
absent_retries: 30
|
absent_retries: 30
|
||||||
|
|
||||||
- name: assert delete of existing stack returns changed
|
- name: assert delete of existing stack returns changed
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- output is changed
|
- output is changed
|
||||||
|
|
||||||
- name: Delete stack again
|
- name: Delete stack again
|
||||||
register: output
|
register: output
|
||||||
docker_stack:
|
docker_stack:
|
||||||
state: absent
|
state: absent
|
||||||
name: test_stack
|
name: test_stack
|
||||||
absent_retries: 30
|
absent_retries: 30
|
||||||
|
|
||||||
- name: assert state=absent idempotency
|
- name: assert state=absent idempotency
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- output is not changed
|
- output is not changed
|
||||||
|
|
||||||
always:
|
always:
|
||||||
- name: Remove a Swarm cluster
|
- name: Remove a Swarm cluster
|
||||||
docker_swarm:
|
docker_swarm:
|
||||||
state: absent
|
state: absent
|
||||||
force: true
|
force: true
|
||||||
|
|||||||
@ -5,6 +5,6 @@
|
|||||||
|
|
||||||
version: '3'
|
version: '3'
|
||||||
services:
|
services:
|
||||||
busybox:
|
busybox:
|
||||||
image: "{{ docker_test_image_busybox }}"
|
image: "{{ docker_test_image_busybox }}"
|
||||||
command: sleep 3600
|
command: sleep 3600
|
||||||
|
|||||||
@ -5,6 +5,6 @@
|
|||||||
|
|
||||||
version: '3'
|
version: '3'
|
||||||
services:
|
services:
|
||||||
busybox:
|
busybox:
|
||||||
environment:
|
environment:
|
||||||
envvar: value
|
envvar: value
|
||||||
|
|||||||
@ -4,17 +4,17 @@
|
|||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
stack_compose_base:
|
stack_compose_base:
|
||||||
version: '3'
|
version: '3'
|
||||||
services:
|
services:
|
||||||
busybox:
|
busybox:
|
||||||
image: "{{ docker_test_image_busybox }}"
|
image: "{{ docker_test_image_busybox }}"
|
||||||
command: sleep 3600
|
command: sleep 3600
|
||||||
|
|
||||||
stack_compose_overrides:
|
stack_compose_overrides:
|
||||||
version: '3'
|
version: '3'
|
||||||
services:
|
services:
|
||||||
busybox:
|
busybox:
|
||||||
environment:
|
environment:
|
||||||
envvar: value
|
envvar: value
|
||||||
|
|
||||||
stack_update_expected_diff: '{"test_stack_busybox": {"TaskTemplate": {"ContainerSpec": {"Env": ["envvar=value"]}}}}'
|
stack_update_expected_diff: '{"test_stack_busybox": {"TaskTemplate": {"ContainerSpec": {"Env": ["envvar=value"]}}}}'
|
||||||
|
|||||||
@ -4,75 +4,75 @@
|
|||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
- block:
|
- block:
|
||||||
- name: Make sure we're not already using Docker swarm
|
- name: Make sure we're not already using Docker swarm
|
||||||
docker_swarm:
|
docker_swarm:
|
||||||
state: absent
|
state: absent
|
||||||
force: true
|
force: true
|
||||||
|
|
||||||
- name: Get docker_stack_info when docker is not running in swarm mode
|
- name: Get docker_stack_info when docker is not running in swarm mode
|
||||||
docker_stack_info:
|
docker_stack_info:
|
||||||
ignore_errors: true
|
ignore_errors: true
|
||||||
register: output
|
register: output
|
||||||
|
|
||||||
- name: Assert failure when called when swarm is not running
|
- name: Assert failure when called when swarm is not running
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- 'output is failed'
|
- 'output is failed'
|
||||||
- '"Error response from daemon: This node is not a swarm manager" in output.msg'
|
- '"Error response from daemon: This node is not a swarm manager" in output.msg'
|
||||||
|
|
||||||
- name: Create a swarm cluster
|
- name: Create a swarm cluster
|
||||||
docker_swarm:
|
docker_swarm:
|
||||||
state: present
|
state: present
|
||||||
advertise_addr: "{{ ansible_default_ipv4.address | default('127.0.0.1') }}"
|
advertise_addr: "{{ ansible_default_ipv4.address | default('127.0.0.1') }}"
|
||||||
|
|
||||||
- name: Get docker_stack_info when docker is running and not stack available
|
- name: Get docker_stack_info when docker is running and not stack available
|
||||||
docker_stack_info:
|
docker_stack_info:
|
||||||
register: output
|
register: output
|
||||||
|
|
||||||
- name: Assert stack facts
|
- name: Assert stack facts
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- 'output.results | type_debug == "list"'
|
- 'output.results | type_debug == "list"'
|
||||||
- 'output.results | length == 0'
|
- 'output.results | length == 0'
|
||||||
|
|
||||||
- name: Template compose files
|
- name: Template compose files
|
||||||
template:
|
template:
|
||||||
src: "{{ item }}"
|
src: "{{ item }}"
|
||||||
dest: "{{ remote_tmp_dir }}/"
|
dest: "{{ remote_tmp_dir }}/"
|
||||||
with_items:
|
with_items:
|
||||||
- stack_compose_base.yml
|
- stack_compose_base.yml
|
||||||
- stack_compose_overrides.yml
|
- stack_compose_overrides.yml
|
||||||
|
|
||||||
- name: Install docker_stack python requirements
|
- name: Install docker_stack python requirements
|
||||||
pip:
|
pip:
|
||||||
name: jsondiff,pyyaml
|
name: jsondiff,pyyaml
|
||||||
|
|
||||||
- name: Create stack with compose file
|
- name: Create stack with compose file
|
||||||
register: output
|
register: output
|
||||||
docker_stack:
|
docker_stack:
|
||||||
state: present
|
state: present
|
||||||
name: test_stack
|
name: test_stack
|
||||||
compose:
|
compose:
|
||||||
- "{{ remote_tmp_dir }}/stack_compose_base.yml"
|
- "{{ remote_tmp_dir }}/stack_compose_base.yml"
|
||||||
|
|
||||||
- name: Assert test_stack changed on stack creation with compose file
|
- name: Assert test_stack changed on stack creation with compose file
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- output is changed
|
- output is changed
|
||||||
|
|
||||||
- name: Get docker_stack_info when docker is running
|
- name: Get docker_stack_info when docker is running
|
||||||
docker_stack_info:
|
docker_stack_info:
|
||||||
register: output
|
register: output
|
||||||
|
|
||||||
- name: assert stack facts
|
- name: assert stack facts
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- 'output.results | type_debug == "list"'
|
- 'output.results | type_debug == "list"'
|
||||||
- 'output.results[0].Name == "test_stack"'
|
- 'output.results[0].Name == "test_stack"'
|
||||||
- 'output.results[0].Services == "1"'
|
- 'output.results[0].Services == "1"'
|
||||||
|
|
||||||
always:
|
always:
|
||||||
- name: Cleanup
|
- name: Cleanup
|
||||||
docker_swarm:
|
docker_swarm:
|
||||||
state: absent
|
state: absent
|
||||||
force: true
|
force: true
|
||||||
|
|||||||
@ -5,6 +5,6 @@
|
|||||||
|
|
||||||
version: '3'
|
version: '3'
|
||||||
services:
|
services:
|
||||||
busybox:
|
busybox:
|
||||||
image: "{{ docker_test_image_busybox }}"
|
image: "{{ docker_test_image_busybox }}"
|
||||||
command: sleep 3600
|
command: sleep 3600
|
||||||
|
|||||||
@ -5,6 +5,6 @@
|
|||||||
|
|
||||||
version: '3'
|
version: '3'
|
||||||
services:
|
services:
|
||||||
busybox:
|
busybox:
|
||||||
environment:
|
environment:
|
||||||
envvar: value
|
envvar: value
|
||||||
|
|||||||
@ -4,17 +4,17 @@
|
|||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
stack_compose_base:
|
stack_compose_base:
|
||||||
version: '3'
|
version: '3'
|
||||||
services:
|
services:
|
||||||
busybox:
|
busybox:
|
||||||
image: "{{ docker_test_image_busybox }}"
|
image: "{{ docker_test_image_busybox }}"
|
||||||
command: sleep 3600
|
command: sleep 3600
|
||||||
|
|
||||||
stack_compose_overrides:
|
stack_compose_overrides:
|
||||||
version: '3'
|
version: '3'
|
||||||
services:
|
services:
|
||||||
busybox:
|
busybox:
|
||||||
environment:
|
environment:
|
||||||
envvar: value
|
envvar: value
|
||||||
|
|
||||||
stack_update_expected_diff: '{"test_stack_busybox": {"TaskTemplate": {"ContainerSpec": {"Env": ["envvar=value"]}}}}'
|
stack_update_expected_diff: '{"test_stack_busybox": {"TaskTemplate": {"ContainerSpec": {"Env": ["envvar=value"]}}}}'
|
||||||
|
|||||||
@ -4,82 +4,82 @@
|
|||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
- block:
|
- block:
|
||||||
- name: Make sure we're not already using Docker swarm
|
- name: Make sure we're not already using Docker swarm
|
||||||
docker_swarm:
|
docker_swarm:
|
||||||
state: absent
|
state: absent
|
||||||
force: true
|
force: true
|
||||||
|
|
||||||
- name: Get docker_stack_info when docker is not running in swarm mode
|
- name: Get docker_stack_info when docker is not running in swarm mode
|
||||||
docker_stack_info:
|
docker_stack_info:
|
||||||
ignore_errors: true
|
ignore_errors: true
|
||||||
register: output
|
register: output
|
||||||
|
|
||||||
- name: Assert failure when called when swarm is not running
|
- name: Assert failure when called when swarm is not running
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- 'output is failed'
|
- 'output is failed'
|
||||||
- '"Error response from daemon: This node is not a swarm manager" in output.msg'
|
- '"Error response from daemon: This node is not a swarm manager" in output.msg'
|
||||||
|
|
||||||
- name: Create a swarm cluster
|
- name: Create a swarm cluster
|
||||||
docker_swarm:
|
docker_swarm:
|
||||||
state: present
|
state: present
|
||||||
advertise_addr: "{{ ansible_default_ipv4.address | default('127.0.0.1') }}"
|
advertise_addr: "{{ ansible_default_ipv4.address | default('127.0.0.1') }}"
|
||||||
|
|
||||||
- name: Get docker_stack_info when docker is running and not stack available
|
- name: Get docker_stack_info when docker is running and not stack available
|
||||||
docker_stack_info:
|
docker_stack_info:
|
||||||
register: output
|
register: output
|
||||||
|
|
||||||
- name: Assert stack facts
|
- name: Assert stack facts
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- 'output.results | type_debug == "list"'
|
- 'output.results | type_debug == "list"'
|
||||||
- 'output.results | length == 0'
|
- 'output.results | length == 0'
|
||||||
|
|
||||||
- name: Template compose files
|
- name: Template compose files
|
||||||
template:
|
template:
|
||||||
src: "{{ item }}"
|
src: "{{ item }}"
|
||||||
dest: "{{ remote_tmp_dir }}/"
|
dest: "{{ remote_tmp_dir }}/"
|
||||||
with_items:
|
with_items:
|
||||||
- stack_compose_base.yml
|
- stack_compose_base.yml
|
||||||
- stack_compose_overrides.yml
|
- stack_compose_overrides.yml
|
||||||
|
|
||||||
- name: Install docker_stack python requirements
|
- name: Install docker_stack python requirements
|
||||||
pip:
|
pip:
|
||||||
name: jsondiff,pyyaml
|
name: jsondiff,pyyaml
|
||||||
|
|
||||||
- name: Create stack with compose file
|
- name: Create stack with compose file
|
||||||
register: output
|
register: output
|
||||||
docker_stack:
|
docker_stack:
|
||||||
state: present
|
state: present
|
||||||
name: test_stack
|
name: test_stack
|
||||||
compose:
|
compose:
|
||||||
- "{{ remote_tmp_dir }}/stack_compose_base.yml"
|
- "{{ remote_tmp_dir }}/stack_compose_base.yml"
|
||||||
|
|
||||||
- name: Assert test_stack changed on stack creation with compose file
|
- name: Assert test_stack changed on stack creation with compose file
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- output is changed
|
- output is changed
|
||||||
|
|
||||||
- name: Wait a bit to make sure stack is running
|
- name: Wait a bit to make sure stack is running
|
||||||
pause:
|
pause:
|
||||||
seconds: 5
|
seconds: 5
|
||||||
|
|
||||||
- name: Get docker_stack_info when docker is running
|
- name: Get docker_stack_info when docker is running
|
||||||
docker_stack_info:
|
docker_stack_info:
|
||||||
register: output
|
register: output
|
||||||
|
|
||||||
- name: Get docker_stack_task_info first element
|
- name: Get docker_stack_task_info first element
|
||||||
docker_stack_task_info:
|
docker_stack_task_info:
|
||||||
name: "{{ output.results[0].Name }}"
|
name: "{{ output.results[0].Name }}"
|
||||||
register: output
|
register: output
|
||||||
|
|
||||||
- name: assert stack facts
|
- name: assert stack facts
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- 'output.results | type_debug == "list"'
|
- 'output.results | type_debug == "list"'
|
||||||
- 'output.results[0].DesiredState == "Running"'
|
- 'output.results[0].DesiredState == "Running"'
|
||||||
- 'output.results[0].Image == docker_test_image_busybox'
|
- 'output.results[0].Image == docker_test_image_busybox'
|
||||||
- 'output.results[0].Name == "test_stack_busybox.1"'
|
- 'output.results[0].Name == "test_stack_busybox.1"'
|
||||||
|
|
||||||
always:
|
always:
|
||||||
- name: Cleanup
|
- name: Cleanup
|
||||||
|
|||||||
@ -5,6 +5,6 @@
|
|||||||
|
|
||||||
version: '3'
|
version: '3'
|
||||||
services:
|
services:
|
||||||
busybox:
|
busybox:
|
||||||
image: "{{ docker_test_image_busybox }}"
|
image: "{{ docker_test_image_busybox }}"
|
||||||
command: sleep 3600
|
command: sleep 3600
|
||||||
|
|||||||
@ -5,6 +5,6 @@
|
|||||||
|
|
||||||
version: '3'
|
version: '3'
|
||||||
services:
|
services:
|
||||||
busybox:
|
busybox:
|
||||||
environment:
|
environment:
|
||||||
envvar: value
|
envvar: value
|
||||||
|
|||||||
@ -4,17 +4,17 @@
|
|||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
stack_compose_base:
|
stack_compose_base:
|
||||||
version: '3'
|
version: '3'
|
||||||
services:
|
services:
|
||||||
busybox:
|
busybox:
|
||||||
image: "{{ docker_test_image_busybox }}"
|
image: "{{ docker_test_image_busybox }}"
|
||||||
command: sleep 3600
|
command: sleep 3600
|
||||||
|
|
||||||
stack_compose_overrides:
|
stack_compose_overrides:
|
||||||
version: '3'
|
version: '3'
|
||||||
services:
|
services:
|
||||||
busybox:
|
busybox:
|
||||||
environment:
|
environment:
|
||||||
envvar: value
|
envvar: value
|
||||||
|
|
||||||
stack_update_expected_diff: '{"test_stack_busybox": {"TaskTemplate": {"ContainerSpec": {"Env": ["envvar=value"]}}}}'
|
stack_update_expected_diff: '{"test_stack_busybox": {"TaskTemplate": {"ContainerSpec": {"Env": ["envvar=value"]}}}}'
|
||||||
|
|||||||
@ -18,8 +18,8 @@
|
|||||||
- name: assert failure when called with state=join and no remote_addrs,join_token
|
- name: assert failure when called with state=join and no remote_addrs,join_token
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- 'output.failed'
|
- 'output.failed'
|
||||||
- 'output.msg == "state is join but all of the following are missing: remote_addrs, join_token"'
|
- 'output.msg == "state is join but all of the following are missing: remote_addrs, join_token"'
|
||||||
|
|
||||||
- name: Test parameters with state=remove
|
- name: Test parameters with state=remove
|
||||||
docker_swarm:
|
docker_swarm:
|
||||||
@ -30,8 +30,8 @@
|
|||||||
- name: assert failure when called with state=remove and no node_id
|
- name: assert failure when called with state=remove and no node_id
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- 'output.failed'
|
- 'output.failed'
|
||||||
- 'output.msg == "state is remove but all of the following are missing: node_id"'
|
- 'output.msg == "state is remove but all of the following are missing: node_id"'
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
## Creation ########################################################
|
## Creation ########################################################
|
||||||
@ -87,27 +87,27 @@
|
|||||||
- name: assert changed when create a new swarm cluster
|
- name: assert changed when create a new swarm cluster
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- 'output_1 is changed'
|
- 'output_1 is changed'
|
||||||
- 'output_1.diff.before is defined'
|
- 'output_1.diff.before is defined'
|
||||||
- 'output_1.diff.after is defined'
|
- 'output_1.diff.after is defined'
|
||||||
- 'output_2 is changed'
|
- 'output_2 is changed'
|
||||||
- '(output_2.actions[0] | regex_search("New Swarm cluster created: ")) is truthy'
|
- '(output_2.actions[0] | regex_search("New Swarm cluster created: ")) is truthy'
|
||||||
- 'output_2.swarm_facts.JoinTokens.Manager is truthy'
|
- 'output_2.swarm_facts.JoinTokens.Manager is truthy'
|
||||||
- 'output_2.swarm_facts.JoinTokens.Worker is truthy'
|
- 'output_2.swarm_facts.JoinTokens.Worker is truthy'
|
||||||
- 'output_2.diff.before is defined'
|
- 'output_2.diff.before is defined'
|
||||||
- 'output_2.diff.after is defined'
|
- 'output_2.diff.after is defined'
|
||||||
- 'output_3 is not changed'
|
- 'output_3 is not changed'
|
||||||
- 'output_3.diff.before is defined'
|
- 'output_3.diff.before is defined'
|
||||||
- 'output_3.diff.after is defined'
|
- 'output_3.diff.after is defined'
|
||||||
- 'output_4 is not changed'
|
- 'output_4 is not changed'
|
||||||
- 'output_4.diff.before is defined'
|
- 'output_4.diff.before is defined'
|
||||||
- 'output_4.diff.after is defined'
|
- 'output_4.diff.after is defined'
|
||||||
- 'output_5 is changed'
|
- 'output_5 is changed'
|
||||||
- 'output_5.diff.before is defined'
|
- 'output_5.diff.before is defined'
|
||||||
- 'output_5.diff.after is defined'
|
- 'output_5.diff.after is defined'
|
||||||
- 'output_6 is changed'
|
- 'output_6 is changed'
|
||||||
- 'output_6.diff.before is defined'
|
- 'output_6.diff.before is defined'
|
||||||
- 'output_6.diff.after is defined'
|
- 'output_6.diff.after is defined'
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
## Removal #########################################################
|
## Removal #########################################################
|
||||||
@ -146,18 +146,18 @@
|
|||||||
- name: assert changed when remove a swarm cluster
|
- name: assert changed when remove a swarm cluster
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- 'output_1 is changed'
|
- 'output_1 is changed'
|
||||||
- 'output_1.diff.before is defined'
|
- 'output_1.diff.before is defined'
|
||||||
- 'output_1.diff.after is defined'
|
- 'output_1.diff.after is defined'
|
||||||
- 'output_2 is changed'
|
- 'output_2 is changed'
|
||||||
- 'output_2.actions[0] == "Node has left the swarm cluster"'
|
- 'output_2.actions[0] == "Node has left the swarm cluster"'
|
||||||
- 'output_2.diff.before is defined'
|
- 'output_2.diff.before is defined'
|
||||||
- 'output_2.diff.after is defined'
|
- 'output_2.diff.after is defined'
|
||||||
- 'output_3 is not changed'
|
- 'output_3 is not changed'
|
||||||
- 'output_3.diff.before is defined'
|
- 'output_3.diff.before is defined'
|
||||||
- 'output_3.diff.after is defined'
|
- 'output_3.diff.after is defined'
|
||||||
- 'output_4 is not changed'
|
- 'output_4 is not changed'
|
||||||
- 'output_4.diff.before is defined'
|
- 'output_4.diff.before is defined'
|
||||||
- 'output_4.diff.after is defined'
|
- 'output_4.diff.after is defined'
|
||||||
|
|
||||||
- include_tasks: cleanup.yml
|
- include_tasks: cleanup.yml
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user