Molecule job for testing plugins and modules
and remove ansible_facts from podman_container_info module Change-Id: I0c768bc6168363fa3758562f9f053aa9ab85236b
This commit is contained in:
parent
a2c781508c
commit
2d42082737
7
tox.ini
7
tox.ini
@ -123,3 +123,10 @@ commands =
|
||||
echo -e '\n\nNo molecule tests have been executed\nSee https://docs.openstack.org/tripleo-ansible/latest/contributing.html#local-testing-of-new-roles\n\n'; \
|
||||
fi"
|
||||
{[testenv:linters]commands}
|
||||
|
||||
[testenv:modules]
|
||||
deps=
|
||||
{[testenv:linters]deps}
|
||||
commands =
|
||||
bash -c "cd {toxinidir}/tripleo_ansible/ansible_plugins/tests; molecule test --all;"
|
||||
{[testenv:linters]commands}
|
||||
|
@ -13,54 +13,43 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from __future__ import absolute_import
|
||||
from __future__ import division
|
||||
from __future__ import print_function
|
||||
from __future__ import absolute_import, division, print_function
|
||||
__metaclass__ = type
|
||||
|
||||
import json
|
||||
import yaml
|
||||
|
||||
from ansible.module_utils.basic import AnsibleModule
|
||||
import ansible.module_utils.six as six
|
||||
|
||||
six.add_metaclass(type)
|
||||
|
||||
ANSIBLE_METADATA = {
|
||||
'metadata_version': '1.0',
|
||||
'metadata_version': '1.1',
|
||||
'status': ['preview'],
|
||||
'supported_by': 'community'
|
||||
}
|
||||
|
||||
DOCUMENTATION = """
|
||||
---
|
||||
module: podman_container_info
|
||||
author:
|
||||
- Sagi Shnaidman (@sshnaidm)
|
||||
- Emilien Macchi (@EmilienM)
|
||||
version_added: '2.9'
|
||||
version_added: '2.10'
|
||||
short_description: Gather facts about containers using podman
|
||||
notes:
|
||||
- Podman may required elevated privileges in order to run properly.
|
||||
- Podman may require elevated privileges in order to run properly.
|
||||
description:
|
||||
- Gather facts about containers using C(podman)
|
||||
requirements:
|
||||
- "Podman installed on host"
|
||||
options:
|
||||
executable:
|
||||
description:
|
||||
- Path to C(podman) executable if it is not in the C($PATH) on the
|
||||
machine running C(podman)
|
||||
default: 'podman'
|
||||
type: str
|
||||
name:
|
||||
description:
|
||||
- List of tags or UID to gather facts about. If no name is given
|
||||
return facts about all containers.
|
||||
type: list
|
||||
elements: str
|
||||
|
||||
name:
|
||||
description:
|
||||
- List of container names to gather facts about. If no name is given
|
||||
return facts about all containers.
|
||||
type: list
|
||||
elements: str
|
||||
executable:
|
||||
description:
|
||||
- Path to C(podman) executable if it is not in the C($PATH) on the
|
||||
machine running C(podman)
|
||||
default: 'podman'
|
||||
type: str
|
||||
"""
|
||||
|
||||
EXAMPLES = """
|
||||
- name: Gather facts for all containers
|
||||
podman_container_info:
|
||||
@ -75,273 +64,274 @@ EXAMPLES = """
|
||||
- redis
|
||||
- web1
|
||||
"""
|
||||
|
||||
RETURN = """
|
||||
containers:
|
||||
description: Facts from all or specificed containers
|
||||
returned: always
|
||||
type: dict
|
||||
type: list
|
||||
sample: [
|
||||
{
|
||||
"Id": "c5c39f9b80a6ea2ad665aa9946435934e478a0c5322da835f3883872f",
|
||||
"Created": "2019-10-01T12:51:00.233106443Z",
|
||||
"Path": "dumb-init",
|
||||
"Args": [
|
||||
"--single-child",
|
||||
"--",
|
||||
"kolla_start"
|
||||
],
|
||||
"State": {
|
||||
"OciVersion": "1.0.1-dev",
|
||||
"Status": "configured",
|
||||
"Running": false,
|
||||
"Paused": false,
|
||||
"Restarting": false,
|
||||
"OOMKilled": false,
|
||||
"Dead": false,
|
||||
"Pid": 0,
|
||||
"ExitCode": 0,
|
||||
"Error": "",
|
||||
"StartedAt": "0001-01-01T00:00:00Z",
|
||||
"FinishedAt": "0001-01-01T00:00:00Z",
|
||||
"Healthcheck": {
|
||||
"Status": "",
|
||||
"FailingStreak": 0,
|
||||
"Log": null
|
||||
}
|
||||
},
|
||||
"Image": "0e267acda67d0ebd643e900d820a91b961d859743039e620191ca1",
|
||||
"ImageName": "docker.io/tripleomaster/centos-haproxy:latest",
|
||||
"Rootfs": "",
|
||||
"Pod": "",
|
||||
"ResolvConfPath": "",
|
||||
"HostnamePath": "",
|
||||
"HostsPath": "",
|
||||
"OCIRuntime": "runc",
|
||||
"Name": "haproxy",
|
||||
"RestartCount": 0,
|
||||
"Driver": "overlay",
|
||||
"MountLabel": "system_u:object_r:svirt_sandbox_file_t:s0:c78,c866",
|
||||
"ProcessLabel": "system_u:system_r:svirt_lxc_net_t:s0:c785,c866",
|
||||
"AppArmorProfile": "",
|
||||
"EffectiveCaps": [
|
||||
"CAP_CHOWN",
|
||||
"CAP_DAC_OVERRIDE",
|
||||
"CAP_FSETID",
|
||||
"CAP_FOWNER",
|
||||
"CAP_MKNOD",
|
||||
"CAP_NET_RAW",
|
||||
"CAP_SETGID",
|
||||
"CAP_SETUID",
|
||||
"CAP_SETFCAP",
|
||||
"CAP_SETPCAP",
|
||||
"CAP_NET_BIND_SERVICE",
|
||||
"CAP_SYS_CHROOT",
|
||||
"CAP_KILL",
|
||||
"CAP_AUDIT_WRITE"
|
||||
],
|
||||
"BoundingCaps": [
|
||||
"CAP_CHOWN",
|
||||
"CAP_DAC_OVERRIDE",
|
||||
"CAP_FSETID",
|
||||
"CAP_FOWNER",
|
||||
"CAP_MKNOD",
|
||||
"CAP_NET_RAW",
|
||||
"CAP_SETGID",
|
||||
"CAP_SETUID",
|
||||
"CAP_SETFCAP",
|
||||
"CAP_SETPCAP",
|
||||
"CAP_NET_BIND_SERVICE",
|
||||
"CAP_SYS_CHROOT",
|
||||
"CAP_KILL",
|
||||
"CAP_AUDIT_WRITE"
|
||||
],
|
||||
"ExecIDs": [],
|
||||
"GraphDriver": {
|
||||
"Name": "overlay",
|
||||
}
|
||||
},
|
||||
"Mounts": [],
|
||||
"Dependencies": [],
|
||||
"NetworkSettings": {
|
||||
"Bridge": "",
|
||||
"SandboxID": "",
|
||||
"HairpinMode": false,
|
||||
"LinkLocalIPv6Address": "",
|
||||
"LinkLocalIPv6PrefixLen": 0,
|
||||
"Ports": [],
|
||||
"SandboxKey": "",
|
||||
"SecondaryIPAddresses": null,
|
||||
"SecondaryIPv6Addresses": null,
|
||||
"EndpointID": "",
|
||||
"Gateway": "",
|
||||
"GlobalIPv6Address": "",
|
||||
"GlobalIPv6PrefixLen": 0,
|
||||
"IPAddress": "",
|
||||
"IPPrefixLen": 0,
|
||||
"IPv6Gateway": "",
|
||||
"MacAddress": ""
|
||||
},
|
||||
"ExitCommand": [
|
||||
"/usr/bin/podman",
|
||||
"--root",
|
||||
"/var/lib/containers/storage",
|
||||
"--runroot",
|
||||
"/var/run/containers/storage",
|
||||
"--log-level",
|
||||
"error",
|
||||
"--cgroup-manager",
|
||||
"systemd",
|
||||
"--tmpdir",
|
||||
"/var/run/libpod",
|
||||
"--runtime",
|
||||
"runc",
|
||||
"--storage-driver",
|
||||
"overlay",
|
||||
"--events-backend",
|
||||
"journald",
|
||||
"container",
|
||||
"cleanup",
|
||||
"c9e813703f9b80a6ea2ad665aa9946435934e478a0c5322da835f3883872f"
|
||||
],
|
||||
"Namespace": "",
|
||||
"IsInfra": false,
|
||||
"Config": {
|
||||
"Hostname": "c5c39e813703",
|
||||
"Domainname": "",
|
||||
"User": "",
|
||||
"AttachStdin": false,
|
||||
"AttachStdout": false,
|
||||
"AttachStderr": false,
|
||||
"Tty": false,
|
||||
"OpenStdin": false,
|
||||
"StdinOnce": false,
|
||||
"Env": [
|
||||
"PATH=/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
|
||||
"TERM=xterm",
|
||||
"HOSTNAME=",
|
||||
"container=oci",
|
||||
"KOLLA_INSTALL_METATYPE=rdo",
|
||||
"KOLLA_BASE_DISTRO=centos",
|
||||
"KOLLA_INSTALL_TYPE=binary",
|
||||
"KOLLA_DISTRO_PYTHON_VERSION=2.7",
|
||||
"KOLLA_BASE_ARCH=x86_64"
|
||||
],
|
||||
"Cmd": [
|
||||
{
|
||||
"Id": "c5c39f9b80a6ea2ad665aa9946435934e478a0c5322da835f3883872f",
|
||||
"Created": "2019-10-01T12:51:00.233106443Z",
|
||||
"Path": "dumb-init",
|
||||
"Args": [
|
||||
"--single-child",
|
||||
"--",
|
||||
"kolla_start"
|
||||
],
|
||||
"Image": "docker.io/tripleomaster/centos-haproxy:latest",
|
||||
"Volumes": null,
|
||||
"WorkingDir": "/",
|
||||
"Entrypoint": "dumb-init --single-child --",
|
||||
"OnBuild": null,
|
||||
"Labels": {
|
||||
"build-date": "20190919",
|
||||
"kolla_version": "8.1.0",
|
||||
"name": "haproxy",
|
||||
"org.label-schema.build-date": "20190801",
|
||||
"org.label-schema.license": "GPLv2",
|
||||
"org.label-schema.name": "CentOS Base Image",
|
||||
"org.label-schema.schema-version": "1.0",
|
||||
"org.label-schema.vendor": "CentOS"
|
||||
},
|
||||
"Annotations": {
|
||||
"io.kubernetes.cri-o.ContainerType": "sandbox",
|
||||
"io.kubernetes.cri-o.TTY": "false",
|
||||
"io.podman.annotations.autoremove": "FALSE",
|
||||
"io.podman.annotations.init": "FALSE",
|
||||
"io.podman.annotations.privileged": "FALSE",
|
||||
"io.podman.annotations.publish-all": "FALSE"
|
||||
},
|
||||
"StopSignal": 15
|
||||
},
|
||||
"HostConfig": {
|
||||
"Binds": [],
|
||||
"ContainerIDFile": "",
|
||||
"LogConfig": {
|
||||
"Type": "k8s-file",
|
||||
"Config": null
|
||||
},
|
||||
"NetworkMode": "default",
|
||||
"PortBindings": {},
|
||||
"RestartPolicy": {
|
||||
"Name": "",
|
||||
"MaximumRetryCount": 0
|
||||
},
|
||||
"AutoRemove": false,
|
||||
"VolumeDriver": "",
|
||||
"VolumesFrom": null,
|
||||
"CapAdd": [],
|
||||
"CapDrop": [],
|
||||
"Dns": [],
|
||||
"DnsOptions": [],
|
||||
"DnsSearch": [],
|
||||
"ExtraHosts": [],
|
||||
"GroupAdd": [],
|
||||
"IpcMode": "",
|
||||
"Cgroup": "",
|
||||
"Links": null,
|
||||
"OomScoreAdj": 0,
|
||||
"PidMode": "",
|
||||
"Privileged": false,
|
||||
"PublishAllPorts": false,
|
||||
"ReadonlyRootfs": false,
|
||||
"SecurityOpt": [],
|
||||
"Tmpfs": {},
|
||||
"UTSMode": "",
|
||||
"UsernsMode": "",
|
||||
"ShmSize": 65536000,
|
||||
"Runtime": "oci",
|
||||
"ConsoleSize": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"Isolation": "",
|
||||
"CpuShares": 0,
|
||||
"Memory": 0,
|
||||
"NanoCpus": 0,
|
||||
"CgroupParent": "",
|
||||
"BlkioWeight": 0,
|
||||
"BlkioWeightDevice": null,
|
||||
"BlkioDeviceReadBps": null,
|
||||
"BlkioDeviceWriteBps": null,
|
||||
"BlkioDeviceReadIOps": null,
|
||||
"BlkioDeviceWriteIOps": null,
|
||||
"CpuPeriod": 0,
|
||||
"CpuQuota": 0,
|
||||
"CpuRealtimePeriod": 0,
|
||||
"CpuRealtimeRuntime": 0,
|
||||
"CpusetCpus": "",
|
||||
"CpusetMems": "",
|
||||
"Devices": [],
|
||||
"DiskQuota": 0,
|
||||
"KernelMemory": 0,
|
||||
"MemoryReservation": 0,
|
||||
"MemorySwap": 0,
|
||||
"MemorySwappiness": -1,
|
||||
"OomKillDisable": false,
|
||||
"PidsLimit": 0,
|
||||
"Ulimits": [
|
||||
{
|
||||
"Name": "RLIMIT_NOFILE",
|
||||
"Soft": 1048576,
|
||||
"Hard": 1048576
|
||||
},
|
||||
{
|
||||
"Name": "RLIMIT_NPROC",
|
||||
"Soft": 1048576,
|
||||
"Hard": 1048576
|
||||
"State": {
|
||||
"OciVersion": "1.0.1-dev",
|
||||
"Status": "configured",
|
||||
"Running": false,
|
||||
"Paused": false,
|
||||
"Restarting": false,
|
||||
"OOMKilled": false,
|
||||
"Dead": false,
|
||||
"Pid": 0,
|
||||
"ExitCode": 0,
|
||||
"Error": "",
|
||||
"StartedAt": "0001-01-01T00:00:00Z",
|
||||
"FinishedAt": "0001-01-01T00:00:00Z",
|
||||
"Healthcheck": {
|
||||
"Status": "",
|
||||
"FailingStreak": 0,
|
||||
"Log": null
|
||||
}
|
||||
},
|
||||
"Image": "0e267acda67d0ebd643e900d820a91b961d859743039e620191ca1",
|
||||
"ImageName": "docker.io/tripleomaster/centos-haproxy:latest",
|
||||
"Rootfs": "",
|
||||
"Pod": "",
|
||||
"ResolvConfPath": "",
|
||||
"HostnamePath": "",
|
||||
"HostsPath": "",
|
||||
"OCIRuntime": "runc",
|
||||
"Name": "haproxy",
|
||||
"RestartCount": 0,
|
||||
"Driver": "overlay",
|
||||
"MountLabel": "system_u:object_r:svirt_sandbox_file_t:s0:c78,c866",
|
||||
"ProcessLabel": "system_u:system_r:svirt_lxc_net_t:s0:c785,c866",
|
||||
"AppArmorProfile": "",
|
||||
"EffectiveCaps": [
|
||||
"CAP_CHOWN",
|
||||
"CAP_DAC_OVERRIDE",
|
||||
"CAP_FSETID",
|
||||
"CAP_FOWNER",
|
||||
"CAP_MKNOD",
|
||||
"CAP_NET_RAW",
|
||||
"CAP_SETGID",
|
||||
"CAP_SETUID",
|
||||
"CAP_SETFCAP",
|
||||
"CAP_SETPCAP",
|
||||
"CAP_NET_BIND_SERVICE",
|
||||
"CAP_SYS_CHROOT",
|
||||
"CAP_KILL",
|
||||
"CAP_AUDIT_WRITE"
|
||||
],
|
||||
"CpuCount": 0,
|
||||
"CpuPercent": 0,
|
||||
"IOMaximumIOps": 0,
|
||||
"IOMaximumBandwidth": 0
|
||||
}
|
||||
}
|
||||
]
|
||||
"BoundingCaps": [
|
||||
"CAP_CHOWN",
|
||||
"CAP_DAC_OVERRIDE",
|
||||
"CAP_FSETID",
|
||||
"CAP_FOWNER",
|
||||
"CAP_MKNOD",
|
||||
"CAP_NET_RAW",
|
||||
"CAP_SETGID",
|
||||
"CAP_SETUID",
|
||||
"CAP_SETFCAP",
|
||||
"CAP_SETPCAP",
|
||||
"CAP_NET_BIND_SERVICE",
|
||||
"CAP_SYS_CHROOT",
|
||||
"CAP_KILL",
|
||||
"CAP_AUDIT_WRITE"
|
||||
],
|
||||
"ExecIDs": [],
|
||||
"GraphDriver": {
|
||||
"Name": "overlay"
|
||||
},
|
||||
"Mounts": [],
|
||||
"Dependencies": [],
|
||||
"NetworkSettings": {
|
||||
"Bridge": "",
|
||||
"SandboxID": "",
|
||||
"HairpinMode": false,
|
||||
"LinkLocalIPv6Address": "",
|
||||
"LinkLocalIPv6PrefixLen": 0,
|
||||
"Ports": [],
|
||||
"SandboxKey": "",
|
||||
"SecondaryIPAddresses": null,
|
||||
"SecondaryIPv6Addresses": null,
|
||||
"EndpointID": "",
|
||||
"Gateway": "",
|
||||
"GlobalIPv6Address": "",
|
||||
"GlobalIPv6PrefixLen": 0,
|
||||
"IPAddress": "",
|
||||
"IPPrefixLen": 0,
|
||||
"IPv6Gateway": "",
|
||||
"MacAddress": ""
|
||||
},
|
||||
"ExitCommand": [
|
||||
"/usr/bin/podman",
|
||||
"--root",
|
||||
"/var/lib/containers/storage",
|
||||
"--runroot",
|
||||
"/var/run/containers/storage",
|
||||
"--log-level",
|
||||
"error",
|
||||
"--cgroup-manager",
|
||||
"systemd",
|
||||
"--tmpdir",
|
||||
"/var/run/libpod",
|
||||
"--runtime",
|
||||
"runc",
|
||||
"--storage-driver",
|
||||
"overlay",
|
||||
"--events-backend",
|
||||
"journald",
|
||||
"container",
|
||||
"cleanup",
|
||||
"c9e813703f9b80a6ea2ad665aa9946435934e478a0c5322da835f3883872f"
|
||||
],
|
||||
"Namespace": "",
|
||||
"IsInfra": false,
|
||||
"Config": {
|
||||
"Hostname": "c5c39e813703",
|
||||
"Domainname": "",
|
||||
"User": "",
|
||||
"AttachStdin": false,
|
||||
"AttachStdout": false,
|
||||
"AttachStderr": false,
|
||||
"Tty": false,
|
||||
"OpenStdin": false,
|
||||
"StdinOnce": false,
|
||||
"Env": [
|
||||
"PATH=/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
|
||||
"TERM=xterm",
|
||||
"HOSTNAME=",
|
||||
"container=oci",
|
||||
"KOLLA_INSTALL_METATYPE=rdo",
|
||||
"KOLLA_BASE_DISTRO=centos",
|
||||
"KOLLA_INSTALL_TYPE=binary",
|
||||
"KOLLA_DISTRO_PYTHON_VERSION=2.7",
|
||||
"KOLLA_BASE_ARCH=x86_64"
|
||||
],
|
||||
"Cmd": [
|
||||
"kolla_start"
|
||||
],
|
||||
"Image": "docker.io/tripleomaster/centos-haproxy:latest",
|
||||
"Volumes": null,
|
||||
"WorkingDir": "/",
|
||||
"Entrypoint": "dumb-init --single-child --",
|
||||
"OnBuild": null,
|
||||
"Labels": {
|
||||
"build-date": "20190919",
|
||||
"kolla_version": "8.1.0",
|
||||
"name": "haproxy",
|
||||
"org.label-schema.build-date": "20190801",
|
||||
"org.label-schema.license": "GPLv2",
|
||||
"org.label-schema.name": "CentOS Base Image",
|
||||
"org.label-schema.schema-version": "1.0",
|
||||
"org.label-schema.vendor": "CentOS"
|
||||
},
|
||||
"Annotations": {
|
||||
"io.kubernetes.cri-o.ContainerType": "sandbox",
|
||||
"io.kubernetes.cri-o.TTY": "false",
|
||||
"io.podman.annotations.autoremove": "FALSE",
|
||||
"io.podman.annotations.init": "FALSE",
|
||||
"io.podman.annotations.privileged": "FALSE",
|
||||
"io.podman.annotations.publish-all": "FALSE"
|
||||
},
|
||||
"StopSignal": 15
|
||||
},
|
||||
"HostConfig": {
|
||||
"Binds": [],
|
||||
"ContainerIDFile": "",
|
||||
"LogConfig": {
|
||||
"Type": "k8s-file",
|
||||
"Config": null
|
||||
},
|
||||
"NetworkMode": "default",
|
||||
"PortBindings": {},
|
||||
"RestartPolicy": {
|
||||
"Name": "",
|
||||
"MaximumRetryCount": 0
|
||||
},
|
||||
"AutoRemove": false,
|
||||
"VolumeDriver": "",
|
||||
"VolumesFrom": null,
|
||||
"CapAdd": [],
|
||||
"CapDrop": [],
|
||||
"Dns": [],
|
||||
"DnsOptions": [],
|
||||
"DnsSearch": [],
|
||||
"ExtraHosts": [],
|
||||
"GroupAdd": [],
|
||||
"IpcMode": "",
|
||||
"Cgroup": "",
|
||||
"Links": null,
|
||||
"OomScoreAdj": 0,
|
||||
"PidMode": "",
|
||||
"Privileged": false,
|
||||
"PublishAllPorts": false,
|
||||
"ReadonlyRootfs": false,
|
||||
"SecurityOpt": [],
|
||||
"Tmpfs": {},
|
||||
"UTSMode": "",
|
||||
"UsernsMode": "",
|
||||
"ShmSize": 65536000,
|
||||
"Runtime": "oci",
|
||||
"ConsoleSize": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"Isolation": "",
|
||||
"CpuShares": 0,
|
||||
"Memory": 0,
|
||||
"NanoCpus": 0,
|
||||
"CgroupParent": "",
|
||||
"BlkioWeight": 0,
|
||||
"BlkioWeightDevice": null,
|
||||
"BlkioDeviceReadBps": null,
|
||||
"BlkioDeviceWriteBps": null,
|
||||
"BlkioDeviceReadIOps": null,
|
||||
"BlkioDeviceWriteIOps": null,
|
||||
"CpuPeriod": 0,
|
||||
"CpuQuota": 0,
|
||||
"CpuRealtimePeriod": 0,
|
||||
"CpuRealtimeRuntime": 0,
|
||||
"CpusetCpus": "",
|
||||
"CpusetMems": "",
|
||||
"Devices": [],
|
||||
"DiskQuota": 0,
|
||||
"KernelMemory": 0,
|
||||
"MemoryReservation": 0,
|
||||
"MemorySwap": 0,
|
||||
"MemorySwappiness": -1,
|
||||
"OomKillDisable": false,
|
||||
"PidsLimit": 0,
|
||||
"Ulimits": [
|
||||
{
|
||||
"Name": "RLIMIT_NOFILE",
|
||||
"Soft": 1048576,
|
||||
"Hard": 1048576
|
||||
},
|
||||
{
|
||||
"Name": "RLIMIT_NPROC",
|
||||
"Soft": 1048576,
|
||||
"Hard": 1048576
|
||||
}
|
||||
],
|
||||
"CpuCount": 0,
|
||||
"CpuPercent": 0,
|
||||
"IOMaximumIOps": 0,
|
||||
"IOMaximumBandwidth": 0
|
||||
}
|
||||
}
|
||||
]
|
||||
"""
|
||||
|
||||
import json
|
||||
from ansible.module_utils.basic import AnsibleModule
|
||||
|
||||
|
||||
def get_containers_facts(module, executable, name):
|
||||
if not name:
|
||||
@ -353,30 +343,32 @@ def get_containers_facts(module, executable, name):
|
||||
command = [executable, 'container', 'inspect']
|
||||
command.extend(name)
|
||||
rc, out, err = module.run_command(command)
|
||||
if not out or rc != 0:
|
||||
if rc != 0:
|
||||
module.fail_json(msg="Unable to gather info for %s: %s" % (name or 'all containers', err))
|
||||
if not out or json.loads(out) is None:
|
||||
return [], out, err
|
||||
return json.loads(out), out, err
|
||||
|
||||
|
||||
def main():
|
||||
module = AnsibleModule(
|
||||
argument_spec=yaml.safe_load(DOCUMENTATION)['options'],
|
||||
argument_spec=dict(
|
||||
executable=dict(type='str', default='podman'),
|
||||
name=dict(type='list', elements='str')
|
||||
),
|
||||
supports_check_mode=True,
|
||||
)
|
||||
|
||||
executable = module.params['executable']
|
||||
name = module.params.get('name')
|
||||
executable = module.get_bin_path(executable, required=True)
|
||||
name = module.params['name']
|
||||
executable = module.get_bin_path(module.params['executable'], required=True)
|
||||
|
||||
inspect_results, out, err = get_containers_facts(module, executable, name)
|
||||
|
||||
results = dict(
|
||||
changed=False,
|
||||
containers=inspect_results,
|
||||
ansible_facts=dict(podman_containers=inspect_results),
|
||||
stdout=out,
|
||||
stderr=err
|
||||
)
|
||||
results = {
|
||||
"changed": False,
|
||||
"containers": inspect_results,
|
||||
"stderr": err
|
||||
}
|
||||
|
||||
module.exit_json(**results)
|
||||
|
||||
|
@ -15,17 +15,11 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
|
||||
from __future__ import absolute_import, division, print_function
|
||||
|
||||
import json
|
||||
import yaml
|
||||
|
||||
from ansible.module_utils.basic import AnsibleModule
|
||||
|
||||
__metaclass__ = type
|
||||
|
||||
ANSIBLE_METADATA = {
|
||||
'metadata_version': '1.0',
|
||||
'metadata_version': '1.1',
|
||||
'status': ['preview'],
|
||||
'supported_by': 'community'
|
||||
}
|
||||
@ -34,7 +28,7 @@ DOCUMENTATION = """
|
||||
module: podman_volume_info
|
||||
author:
|
||||
- "Sagi Shnaidman (@sshnaidm)"
|
||||
version_added: '2.9'
|
||||
version_added: '2.10'
|
||||
short_description: Gather info about podman volumes
|
||||
notes: []
|
||||
description:
|
||||
@ -65,21 +59,22 @@ RETURN = """
|
||||
volumes:
|
||||
description: Facts from all or specified volumes
|
||||
returned: always
|
||||
type: dict
|
||||
sample:
|
||||
[
|
||||
{
|
||||
"name": "testvolume",
|
||||
"labels": {},
|
||||
"mountPoint": "/home/ansible/.local/share/testvolume/_data",
|
||||
"driver": "local",
|
||||
"options": {},
|
||||
"scope": "local"
|
||||
}
|
||||
]
|
||||
|
||||
type: list
|
||||
sample: [
|
||||
{
|
||||
"name": "testvolume",
|
||||
"labels": {},
|
||||
"mountPoint": "/home/ansible/.local/share/testvolume/_data",
|
||||
"driver": "local",
|
||||
"options": {},
|
||||
"scope": "local"
|
||||
}
|
||||
]
|
||||
"""
|
||||
|
||||
import json
|
||||
from ansible.module_utils.basic import AnsibleModule
|
||||
|
||||
|
||||
def get_volume_info(module, executable, name):
|
||||
command = [executable, 'volume', 'inspect']
|
||||
@ -88,31 +83,32 @@ def get_volume_info(module, executable, name):
|
||||
else:
|
||||
command.append("--all")
|
||||
rc, out, err = module.run_command(command)
|
||||
if not out or rc != 0:
|
||||
if rc != 0 or 'no such volume' in err:
|
||||
module.fail_json(msg="Unable to gather info for %s: %s" % (name or 'all volumes', err))
|
||||
if not out or json.loads(out) is None:
|
||||
return [], out, err
|
||||
return json.loads(out), out, err
|
||||
|
||||
|
||||
def main():
|
||||
module = AnsibleModule(
|
||||
argument_spec=yaml.safe_load(DOCUMENTATION)['options'],
|
||||
argument_spec=dict(
|
||||
executable=dict(type='str', default='podman'),
|
||||
name=dict(type='str')
|
||||
),
|
||||
supports_check_mode=True,
|
||||
)
|
||||
|
||||
executable = module.params['executable']
|
||||
name = module.params['name']
|
||||
executable = module.get_bin_path(executable, required=True)
|
||||
executable = module.get_bin_path(module.params['executable'], required=True)
|
||||
|
||||
inspect_results, out, err = get_volume_info(module, executable, name)
|
||||
|
||||
results = dict(
|
||||
changed=False,
|
||||
volume=inspect_results,
|
||||
stdout=out,
|
||||
stderr=err
|
||||
)
|
||||
if name:
|
||||
results.update({"exists": bool(inspect_results)})
|
||||
results = {
|
||||
"changed": False,
|
||||
"volumes": inspect_results,
|
||||
"stderr": err
|
||||
}
|
||||
|
||||
module.exit_json(**results)
|
||||
|
||||
|
33
tripleo_ansible/ansible_plugins/tests/.yamllint
Normal file
33
tripleo_ansible/ansible_plugins/tests/.yamllint
Normal file
@ -0,0 +1,33 @@
|
||||
---
|
||||
# Based on ansible-lint config
|
||||
extends: default
|
||||
|
||||
rules:
|
||||
braces:
|
||||
max-spaces-inside: 1
|
||||
level: error
|
||||
brackets:
|
||||
max-spaces-inside: 1
|
||||
level: error
|
||||
colons:
|
||||
max-spaces-after: -1
|
||||
level: error
|
||||
commas:
|
||||
max-spaces-after: -1
|
||||
level: error
|
||||
comments: disable
|
||||
comments-indentation: disable
|
||||
document-start: disable
|
||||
empty-lines:
|
||||
max: 3
|
||||
level: error
|
||||
hyphens:
|
||||
level: error
|
||||
indentation: disable
|
||||
key-duplicates: enable
|
||||
line-length: disable
|
||||
new-line-at-end-of-file: disable
|
||||
new-lines:
|
||||
type: unix
|
||||
trailing-spaces: disable
|
||||
truthy: disable
|
@ -0,0 +1,56 @@
|
||||
---
|
||||
driver:
|
||||
name: delegated
|
||||
options:
|
||||
managed: false
|
||||
login_cmd_template: >-
|
||||
ssh
|
||||
-o UserKnownHostsFile=/dev/null
|
||||
-o StrictHostKeyChecking=no
|
||||
-o Compression=no
|
||||
-o TCPKeepAlive=yes
|
||||
-o VerifyHostKeyDNS=no
|
||||
-o ForwardX11=no
|
||||
-o ForwardAgent=no
|
||||
{instance}
|
||||
ansible_connection_options:
|
||||
ansible_connection: ssh
|
||||
|
||||
log: true
|
||||
|
||||
platforms:
|
||||
- name: instance
|
||||
|
||||
provisioner:
|
||||
name: ansible
|
||||
config_options:
|
||||
defaults:
|
||||
fact_caching: jsonfile
|
||||
fact_caching_connection: /tmp/molecule/facts
|
||||
inventory:
|
||||
hosts:
|
||||
all:
|
||||
hosts:
|
||||
instance:
|
||||
ansible_host: localhost
|
||||
log: true
|
||||
env:
|
||||
ANSIBLE_STDOUT_CALLBACK: yaml
|
||||
ANSIBLE_ROLES_PATH: "${ANSIBLE_ROLES_PATH:-/usr/share/ansible/roles}:${HOME}/zuul-jobs/roles"
|
||||
ANSIBLE_LIBRARY: "${ANSIBLE_LIBRARY:-/usr/share/ansible/plugins/modules}"
|
||||
ANSIBLE_FILTER_PLUGINS: "${ANSIBLE_FILTER_PLUGINS:-/usr/share/ansible/plugins/filter}"
|
||||
|
||||
scenario:
|
||||
name: podman_container
|
||||
test_sequence:
|
||||
- prepare
|
||||
- converge
|
||||
- verify
|
||||
|
||||
lint:
|
||||
enabled: false
|
||||
|
||||
verifier:
|
||||
name: testinfra
|
||||
lint:
|
||||
name: flake8
|
@ -0,0 +1,352 @@
|
||||
---
|
||||
- name: Converge
|
||||
hosts: all
|
||||
tasks:
|
||||
- name: Test podman_container
|
||||
become: true
|
||||
block:
|
||||
- name: Delete all container leftovers from tests
|
||||
podman_container:
|
||||
name: "{{ item }}"
|
||||
state: absent
|
||||
loop:
|
||||
- "alpine:3.7"
|
||||
- "container"
|
||||
- "container2"
|
||||
|
||||
- name: Test no image with default action
|
||||
podman_container:
|
||||
name: container
|
||||
ignore_errors: true
|
||||
register: no_image
|
||||
|
||||
- name: Test no image with state 'started'
|
||||
podman_container:
|
||||
name: container
|
||||
state: started
|
||||
ignore_errors: true
|
||||
register: no_image1
|
||||
|
||||
- name: Test no image with state 'present'
|
||||
podman_container:
|
||||
name: container
|
||||
state: present
|
||||
ignore_errors: true
|
||||
register: no_image2
|
||||
|
||||
- name: Check no image
|
||||
assert:
|
||||
that:
|
||||
- no_image is failed
|
||||
- no_image1 is failed
|
||||
- no_image2 is failed
|
||||
- no_image.msg == "State 'started' required image to be configured!"
|
||||
- no_image1.msg == "State 'started' required image to be configured!"
|
||||
- no_image2.msg == "State 'present' required image to be configured!"
|
||||
fail_msg: No image test failed!
|
||||
success_msg: No image test passed!
|
||||
|
||||
- name: Ensure image doesn't exist
|
||||
podman_image:
|
||||
name: alpine:3.7
|
||||
state: absent
|
||||
|
||||
- name: Check pulling image
|
||||
podman_container:
|
||||
name: container
|
||||
image: alpine:3.7
|
||||
state: present
|
||||
command: sleep 1d
|
||||
register: image
|
||||
|
||||
- name: Check using already pulled image
|
||||
podman_container:
|
||||
name: container2
|
||||
image: alpine:3.7
|
||||
state: present
|
||||
command: sleep 1d
|
||||
register: image2
|
||||
|
||||
- name: Check output is correct
|
||||
assert:
|
||||
that:
|
||||
- image is changed
|
||||
- image.ansible_facts is defined
|
||||
- image.ansible_facts.podman_container is defined
|
||||
- image.ansible_facts.podman_container['State']['Running']
|
||||
- image.container is defined
|
||||
- image.container['State']['Running']
|
||||
- "'pulled image alpine:3.7' in image.actions"
|
||||
- "'started container' in image.actions"
|
||||
- image2 is changed
|
||||
- image2.ansible_facts is defined
|
||||
- image2.ansible_facts.podman_container is defined
|
||||
- image2.ansible_facts.podman_container['State']['Running']
|
||||
- image2.container is defined
|
||||
- image2.container['State']['Running']
|
||||
- "'pulled image alpine:3.7' not in image2.actions"
|
||||
- "'started container2' in image2.actions"
|
||||
fail_msg: Pulling image test failed!
|
||||
success_msg: Pulling image test passed!
|
||||
|
||||
- name: Check failed image pull
|
||||
podman_container:
|
||||
name: container
|
||||
image: ineverneverneverexist
|
||||
state: present
|
||||
command: sleep 1d
|
||||
register: imagefail
|
||||
ignore_errors: true
|
||||
|
||||
- name: Check output is correct
|
||||
assert:
|
||||
that:
|
||||
- imagefail is failed
|
||||
- imagefail.msg == "Can't pull image ineverneverneverexist"
|
||||
|
||||
|
||||
- name: Force container recreate
|
||||
podman_container:
|
||||
name: container
|
||||
image: alpine
|
||||
state: present
|
||||
command: sleep 1d
|
||||
recreate: true
|
||||
register: recreated
|
||||
|
||||
- name: Check output is correct
|
||||
assert:
|
||||
that:
|
||||
- recreated is changed
|
||||
- recreated.ansible_facts is defined
|
||||
- recreated.ansible_facts.podman_container is defined
|
||||
- recreated.ansible_facts.podman_container['State']['Running']
|
||||
- "'recreated container' in recreated.actions"
|
||||
fail_msg: Force recreate test failed!
|
||||
success_msg: Force recreate test passed!
|
||||
|
||||
- name: Stop container
|
||||
podman_container:
|
||||
name: container
|
||||
state: stopped
|
||||
register: stopped
|
||||
|
||||
- name: Stop the same container again (idempotency)
|
||||
podman_container:
|
||||
name: container
|
||||
state: stopped
|
||||
register: stopped_again
|
||||
|
||||
- name: Check output is correct
|
||||
assert:
|
||||
that:
|
||||
- stopped is changed
|
||||
- stopped.ansible_facts is defined
|
||||
- stopped.ansible_facts.podman_container is defined
|
||||
- not stopped.ansible_facts.podman_container['State']['Running']
|
||||
- "'stopped container' in stopped.actions"
|
||||
- stopped_again is not changed
|
||||
- stopped_again.ansible_facts is defined
|
||||
- stopped_again.ansible_facts.podman_container is defined
|
||||
- not stopped_again.ansible_facts.podman_container['State']['Running']
|
||||
- stopped_again.actions == []
|
||||
fail_msg: Stopping container test failed!
|
||||
success_msg: Stopping container test passed!
|
||||
|
||||
- name: Delete stopped container
|
||||
podman_container:
|
||||
name: container
|
||||
state: absent
|
||||
register: deleted
|
||||
|
||||
- name: Delete again container (idempotency)
|
||||
podman_container:
|
||||
name: container
|
||||
state: absent
|
||||
register: deleted_again
|
||||
|
||||
- name: Check output is correct
|
||||
assert:
|
||||
that:
|
||||
- deleted is changed
|
||||
- deleted.ansible_facts is defined
|
||||
- deleted.ansible_facts.podman_container is defined
|
||||
- deleted.ansible_facts.podman_container == {}
|
||||
- "'deleted container' in deleted.actions"
|
||||
- deleted_again is not changed
|
||||
- deleted_again.ansible_facts is defined
|
||||
- deleted_again.ansible_facts.podman_container is defined
|
||||
- deleted_again.ansible_facts.podman_container == {}
|
||||
- deleted_again.actions == []
|
||||
fail_msg: Deleting stopped container test failed!
|
||||
success_msg: Deleting stopped container test passed!
|
||||
|
||||
- name: Create container, but don't run
|
||||
podman_container:
|
||||
name: container
|
||||
image: alpine:3.7
|
||||
state: stopped
|
||||
command: sleep 1d
|
||||
register: created
|
||||
|
||||
- name: Check output is correct
|
||||
assert:
|
||||
that:
|
||||
- created is changed
|
||||
- created.ansible_facts is defined
|
||||
- created.ansible_facts.podman_container is defined
|
||||
- created.ansible_facts.podman_container != {}
|
||||
- not created.ansible_facts.podman_container['State']['Running']
|
||||
- "'created container' in created.actions"
|
||||
fail_msg: "Creating stopped container test failed!"
|
||||
success_msg: "Creating stopped container test passed!"
|
||||
|
||||
- name: Delete created container
|
||||
podman_container:
|
||||
name: container
|
||||
state: absent
|
||||
|
||||
- name: Start container that was deleted
|
||||
podman_container:
|
||||
name: container
|
||||
image: alpine:3.7
|
||||
state: started
|
||||
command: sleep 1d
|
||||
register: started
|
||||
|
||||
- name: Check output is correct
|
||||
assert:
|
||||
that:
|
||||
- started is changed
|
||||
- started.ansible_facts is defined
|
||||
- started.ansible_facts.podman_container is defined
|
||||
- started.ansible_facts.podman_container['State']['Running']
|
||||
- started.container is defined
|
||||
- started.container['State']['Running']
|
||||
- "'pulled image alpine:3.7' not in started.actions"
|
||||
|
||||
- name: Delete started container
|
||||
podman_container:
|
||||
name: container
|
||||
state: absent
|
||||
register: deleted
|
||||
|
||||
- name: Delete again container (idempotency)
|
||||
podman_container:
|
||||
name: container
|
||||
state: absent
|
||||
register: deleted_again
|
||||
|
||||
- name: Check output is correct
|
||||
assert:
|
||||
that:
|
||||
- deleted is changed
|
||||
- deleted.ansible_facts is defined
|
||||
- deleted.ansible_facts.podman_container is defined
|
||||
- deleted.ansible_facts.podman_container == {}
|
||||
- "'deleted container' in deleted.actions"
|
||||
- deleted_again is not changed
|
||||
- deleted_again.ansible_facts is defined
|
||||
- deleted_again.ansible_facts.podman_container is defined
|
||||
- deleted_again.ansible_facts.podman_container == {}
|
||||
- deleted_again.actions == []
|
||||
fail_msg: Deleting started container test failed!
|
||||
success_msg: Deleting started container test passed!
|
||||
|
||||
- name: Recreate container with parameters
|
||||
podman_container:
|
||||
name: container
|
||||
image: alpine:3.7
|
||||
state: started
|
||||
command: sleep 1d
|
||||
recreate: true
|
||||
etc_hosts:
|
||||
host1: 127.0.0.1
|
||||
host2: 127.0.0.1
|
||||
annotation:
|
||||
this: "annotation_value"
|
||||
dns:
|
||||
- 1.1.1.1
|
||||
- 8.8.4.4
|
||||
dns_search: example.com
|
||||
cap_add:
|
||||
- SYS_TIME
|
||||
- NET_ADMIN
|
||||
publish:
|
||||
- "9000:80"
|
||||
- "9001:8000"
|
||||
workdir: "/bin"
|
||||
env:
|
||||
FOO: bar
|
||||
BAR: foo
|
||||
TEST: 1
|
||||
BOOL: false
|
||||
group_add: "somegroup"
|
||||
label:
|
||||
somelabel: labelvalue
|
||||
otheralbe: othervalue
|
||||
volumes:
|
||||
- /tmp:/data
|
||||
register: test
|
||||
|
||||
- name: Check output is correct
|
||||
assert:
|
||||
that:
|
||||
- test is changed
|
||||
- test.ansible_facts is defined
|
||||
- test.ansible_facts.podman_container is defined
|
||||
- test.ansible_facts.podman_container != {}
|
||||
- test.ansible_facts.podman_container['State']['Running']
|
||||
# test capabilities
|
||||
- "'CAP_SYS_TIME' in test.ansible_facts.podman_container['BoundingCaps']"
|
||||
- "'CAP_NET_ADMIN' in test.ansible_facts.podman_container['BoundingCaps']"
|
||||
# test annotations
|
||||
- test.ansible_facts.podman_container['Config']['Annotations']['this'] is defined
|
||||
- test.ansible_facts.podman_container['Config']['Annotations']['this'] == "annotation_value"
|
||||
# test DNS
|
||||
- >-
|
||||
(test.ansible_facts.podman_container['HostConfig']['Dns'] is defined and
|
||||
test.ansible_facts.podman_container['HostConfig']['Dns'] == ['1.1.1.1', '8.8.4.4']) or
|
||||
(test.ansible_facts.podman_container['HostConfig']['DNS'] is defined and
|
||||
test.ansible_facts.podman_container['HostConfig']['DNS'] == ['1.1.1.1', '8.8.4.4'])
|
||||
# test ports
|
||||
- test.ansible_facts.podman_container['NetworkSettings']['Ports']|length == 2
|
||||
# test working dir
|
||||
- test.ansible_facts.podman_container['Config']['WorkingDir'] == "/bin"
|
||||
# test dns search
|
||||
- >-
|
||||
(test.ansible_facts.podman_container['HostConfig']['DnsSearch'] is defined and
|
||||
test.ansible_facts.podman_container['HostConfig']['DnsSearch'] == ['example.com']) or
|
||||
(test.ansible_facts.podman_container['HostConfig']['DNSSearch'] is defined and
|
||||
test.ansible_facts.podman_container['HostConfig']['DNSSearch'] == ['example.com'])
|
||||
# test environment variables
|
||||
- "'FOO=bar' in test.ansible_facts.podman_container['Config']['Env']"
|
||||
- "'BAR=foo' in test.ansible_facts.podman_container['Config']['Env']"
|
||||
- "'TEST=1' in test.ansible_facts.podman_container['Config']['Env']"
|
||||
- "'BOOL=False' in test.ansible_facts.podman_container['Config']['Env']"
|
||||
# test labels
|
||||
- test.ansible_facts.podman_container['Config']['Labels'] | length == 2
|
||||
- test.ansible_facts.podman_container['Config']['Labels']['somelabel'] == "labelvalue"
|
||||
- test.ansible_facts.podman_container['Config']['Labels']['otheralbe'] == "othervalue"
|
||||
# test mounts
|
||||
- >-
|
||||
(test.ansible_facts.podman_container['Mounts'][0]['Destination'] is defined and
|
||||
'/data' in test.ansible_facts.podman_container['Mounts'] | map(attribute='Destination') | list) or
|
||||
(test.ansible_facts.podman_container['Mounts'][0]['destination'] is defined and
|
||||
'/data' in test.ansible_facts.podman_container['Mounts'] | map(attribute='destination') | list)
|
||||
- >-
|
||||
(test.ansible_facts.podman_container['Mounts'][0]['Source'] is defined and
|
||||
'/tmp' in test.ansible_facts.podman_container['Mounts'] | map(attribute='Source') | list) or
|
||||
(test.ansible_facts.podman_container['Mounts'][0]['source'] is defined and
|
||||
'/tmp' in test.ansible_facts.podman_container['Mounts'] | map(attribute='source') | list)
|
||||
fail_msg: Parameters container test failed!
|
||||
success_msg: Parameters container test passed!
|
||||
always:
|
||||
- name: Delete all container leftovers from tests
|
||||
podman_container:
|
||||
name: "{{ item }}"
|
||||
state: absent
|
||||
loop:
|
||||
- "alpine:3.7"
|
||||
- "container"
|
||||
- "container2"
|
@ -0,0 +1,22 @@
|
||||
---
|
||||
# Copyright 2019 Red Hat, Inc.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
- name: Prepare
|
||||
hosts: all
|
||||
roles:
|
||||
- role: test_deps
|
||||
test_deps_extra_packages:
|
||||
- podman
|
@ -0,0 +1,56 @@
|
||||
---
|
||||
driver:
|
||||
name: delegated
|
||||
options:
|
||||
managed: false
|
||||
login_cmd_template: >-
|
||||
ssh
|
||||
-o UserKnownHostsFile=/dev/null
|
||||
-o StrictHostKeyChecking=no
|
||||
-o Compression=no
|
||||
-o TCPKeepAlive=yes
|
||||
-o VerifyHostKeyDNS=no
|
||||
-o ForwardX11=no
|
||||
-o ForwardAgent=no
|
||||
{instance}
|
||||
ansible_connection_options:
|
||||
ansible_connection: ssh
|
||||
|
||||
log: true
|
||||
|
||||
platforms:
|
||||
- name: instance
|
||||
|
||||
provisioner:
|
||||
name: ansible
|
||||
config_options:
|
||||
defaults:
|
||||
fact_caching: jsonfile
|
||||
fact_caching_connection: /tmp/molecule/facts
|
||||
inventory:
|
||||
hosts:
|
||||
all:
|
||||
hosts:
|
||||
instance:
|
||||
ansible_host: localhost
|
||||
log: true
|
||||
env:
|
||||
ANSIBLE_STDOUT_CALLBACK: yaml
|
||||
ANSIBLE_ROLES_PATH: "${ANSIBLE_ROLES_PATH:-/usr/share/ansible/roles}:${HOME}/zuul-jobs/roles"
|
||||
ANSIBLE_LIBRARY: "${ANSIBLE_LIBRARY:-/usr/share/ansible/plugins/modules}"
|
||||
ANSIBLE_FILTER_PLUGINS: "${ANSIBLE_FILTER_PLUGINS:-/usr/share/ansible/plugins/filter}"
|
||||
|
||||
scenario:
|
||||
name: podman_container_info
|
||||
test_sequence:
|
||||
- prepare
|
||||
- converge
|
||||
- verify
|
||||
|
||||
lint:
|
||||
enabled: false
|
||||
|
||||
verifier:
|
||||
name: testinfra
|
||||
lint:
|
||||
name: flake8
|
@ -0,0 +1,70 @@
|
||||
---
|
||||
- name: Converge
|
||||
hosts: all
|
||||
tasks:
|
||||
- name: Test podman_container_info
|
||||
become: true
|
||||
block:
|
||||
- name: Generate random value for container name
|
||||
set_fact:
|
||||
container_name: "{{ 'ansible-test-podman-%0x' % ((2**32) | random) }}"
|
||||
|
||||
- name: Make sure container doesn't exist
|
||||
command: podman container rm -f {{ container_name }}
|
||||
ignore_errors: true
|
||||
|
||||
- name: Get missing container info
|
||||
podman_container_info:
|
||||
name: "{{ container_name }}"
|
||||
register: nonexist
|
||||
ignore_errors: true
|
||||
|
||||
- name: Check results
|
||||
assert:
|
||||
that:
|
||||
- "'containers' not in nonexist"
|
||||
- nonexist is failed
|
||||
|
||||
- name: Make sure container exists
|
||||
command: podman container run -d --name {{ container_name }} alpine sleep 15m
|
||||
|
||||
- name: Get existing container info
|
||||
podman_container_info:
|
||||
name: "{{ container_name }}"
|
||||
register: existing_container
|
||||
|
||||
- name: Get all containers info
|
||||
podman_container_info:
|
||||
register: all_containers
|
||||
|
||||
- name: Dump podman container inspect result
|
||||
debug: var=existing_container
|
||||
|
||||
- name: Comparison with 'podman container inspect'
|
||||
command: podman container inspect "{{ container_name }}"
|
||||
register: podman_inspect
|
||||
|
||||
- name: Convert podman inspect output to JSON
|
||||
set_fact:
|
||||
podman_inspect_result: "{{ podman_inspect.stdout | from_json }}"
|
||||
|
||||
- name: Cleanup
|
||||
command: podman container rm -f {{ container_name }}
|
||||
|
||||
- name: Make checks
|
||||
assert:
|
||||
that:
|
||||
- "'containers' in existing_container"
|
||||
- existing_container.containers
|
||||
- "existing_container.containers == podman_inspect_result"
|
||||
- all_containers.containers == existing_container.containers
|
||||
|
||||
always:
|
||||
- name: Delete all container leftovers from tests
|
||||
podman_container:
|
||||
name: "{{ item }}"
|
||||
state: absent
|
||||
loop:
|
||||
- "alpine:3.7"
|
||||
- "container"
|
||||
- "container2"
|
@ -0,0 +1,22 @@
|
||||
---
|
||||
# Copyright 2019 Red Hat, Inc.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
- name: Prepare
|
||||
hosts: all
|
||||
roles:
|
||||
- role: test_deps
|
||||
test_deps_extra_packages:
|
||||
- podman
|
@ -0,0 +1,56 @@
|
||||
---
|
||||
driver:
|
||||
name: delegated
|
||||
options:
|
||||
managed: false
|
||||
login_cmd_template: >-
|
||||
ssh
|
||||
-o UserKnownHostsFile=/dev/null
|
||||
-o StrictHostKeyChecking=no
|
||||
-o Compression=no
|
||||
-o TCPKeepAlive=yes
|
||||
-o VerifyHostKeyDNS=no
|
||||
-o ForwardX11=no
|
||||
-o ForwardAgent=no
|
||||
{instance}
|
||||
ansible_connection_options:
|
||||
ansible_connection: ssh
|
||||
|
||||
log: true
|
||||
|
||||
platforms:
|
||||
- name: instance
|
||||
|
||||
provisioner:
|
||||
name: ansible
|
||||
config_options:
|
||||
defaults:
|
||||
fact_caching: jsonfile
|
||||
fact_caching_connection: /tmp/molecule/facts
|
||||
inventory:
|
||||
hosts:
|
||||
all:
|
||||
hosts:
|
||||
instance:
|
||||
ansible_host: localhost
|
||||
log: true
|
||||
env:
|
||||
ANSIBLE_STDOUT_CALLBACK: yaml
|
||||
ANSIBLE_ROLES_PATH: "${ANSIBLE_ROLES_PATH:-/usr/share/ansible/roles}:${HOME}/zuul-jobs/roles"
|
||||
ANSIBLE_LIBRARY: "${ANSIBLE_LIBRARY:-/usr/share/ansible/plugins/modules}"
|
||||
ANSIBLE_FILTER_PLUGINS: "${ANSIBLE_FILTER_PLUGINS:-/usr/share/ansible/plugins/filter}"
|
||||
|
||||
scenario:
|
||||
name: podman_volume_info
|
||||
test_sequence:
|
||||
- prepare
|
||||
- converge
|
||||
- verify
|
||||
|
||||
lint:
|
||||
enabled: false
|
||||
|
||||
verifier:
|
||||
name: testinfra
|
||||
lint:
|
||||
name: flake8
|
@ -0,0 +1,63 @@
|
||||
---
|
||||
- name: Converge
|
||||
hosts: all
|
||||
tasks:
|
||||
- name: Test podman_volume_info
|
||||
become: true
|
||||
block:
|
||||
- name: Print podman version
|
||||
command: podman version
|
||||
|
||||
- name: Generate random value for volume name
|
||||
set_fact:
|
||||
volume_name: "{{ 'ansible-test-podman-%0x' % ((2**32) | random) }}"
|
||||
|
||||
- name: Make sure volume doesn't exist
|
||||
command: podman volume rm {{ volume_name }}
|
||||
ignore_errors: true
|
||||
|
||||
- name: Get missing volume info
|
||||
podman_volume_info:
|
||||
name: "{{ volume_name }}"
|
||||
register: nonexist
|
||||
ignore_errors: true
|
||||
|
||||
- name: Check results
|
||||
assert:
|
||||
that:
|
||||
- "'volumes' not in nonexist"
|
||||
- nonexist is failed
|
||||
|
||||
- name: Make sure volume exists
|
||||
command: podman volume create {{ volume_name }}
|
||||
|
||||
- name: Get existing volume info
|
||||
podman_volume_info:
|
||||
name: "{{ volume_name }}"
|
||||
register: existing_volume
|
||||
|
||||
- name: Dump podman volume inspect result
|
||||
debug: var=existing_volume
|
||||
|
||||
- name: Comparison with 'podman volume inspect'
|
||||
command: podman volume inspect "{{ volume_name }}"
|
||||
register: podman_inspect
|
||||
|
||||
- name: Convert podman inspect output to JSON
|
||||
set_fact:
|
||||
podman_inspect_result: "{{ podman_inspect.stdout | from_json }}"
|
||||
|
||||
- name: Cleanup
|
||||
command: podman volume rm {{ volume_name }}
|
||||
|
||||
- name: Make checks
|
||||
assert:
|
||||
that:
|
||||
- "'volumes' in existing_volume"
|
||||
- existing_volume.volumes
|
||||
- "existing_volume.volumes == podman_inspect_result"
|
||||
always:
|
||||
|
||||
- name: Cleanup
|
||||
command: podman volume rm {{ volume_name }}
|
||||
ignore_errors: true
|
@ -0,0 +1,22 @@
|
||||
---
|
||||
# Copyright 2019 Red Hat, Inc.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
- name: Prepare
|
||||
hosts: all
|
||||
roles:
|
||||
- role: test_deps
|
||||
test_deps_extra_packages:
|
||||
- podman
|
@ -1,351 +0,0 @@
|
||||
---
|
||||
- name: Test podman_image
|
||||
when:
|
||||
- ansible_facts.virtualization_type != 'docker'
|
||||
- ansible_facts.distribution in ['RedHat', 'Fedora', 'CentOS']
|
||||
block:
|
||||
- name: Delete all container leftovers from tests
|
||||
podman_container:
|
||||
name: "{{ item }}"
|
||||
state: absent
|
||||
loop:
|
||||
- "alpine:3.7"
|
||||
- "container"
|
||||
- "container2"
|
||||
|
||||
- name: Test no image with default action
|
||||
podman_container:
|
||||
name: container
|
||||
ignore_errors: true
|
||||
register: no_image
|
||||
|
||||
- name: Test no image with state 'started'
|
||||
podman_container:
|
||||
name: container
|
||||
state: started
|
||||
ignore_errors: true
|
||||
register: no_image1
|
||||
|
||||
- name: Test no image with state 'present'
|
||||
podman_container:
|
||||
name: container
|
||||
state: present
|
||||
ignore_errors: true
|
||||
register: no_image2
|
||||
|
||||
- name: Check no image
|
||||
assert:
|
||||
that:
|
||||
- no_image is failed
|
||||
- no_image1 is failed
|
||||
- no_image2 is failed
|
||||
- no_image.msg == "State 'started' required image to be configured!"
|
||||
- no_image1.msg == "State 'started' required image to be configured!"
|
||||
- no_image2.msg == "State 'present' required image to be configured!"
|
||||
fail_msg: No image test failed!
|
||||
success_msg: No image test passed!
|
||||
|
||||
- name: Ensure image doesn't exist
|
||||
podman_image:
|
||||
name: alpine:3.7
|
||||
state: absent
|
||||
|
||||
- name: Check pulling image
|
||||
podman_container:
|
||||
name: container
|
||||
image: alpine:3.7
|
||||
state: present
|
||||
command: sleep 1d
|
||||
register: image
|
||||
|
||||
- name: Check using already pulled image
|
||||
podman_container:
|
||||
name: container2
|
||||
image: alpine:3.7
|
||||
state: present
|
||||
command: sleep 1d
|
||||
register: image2
|
||||
|
||||
- name: Check output is correct
|
||||
assert:
|
||||
that:
|
||||
- image is changed
|
||||
- image.ansible_facts is defined
|
||||
- image.ansible_facts.podman_container is defined
|
||||
- image.ansible_facts.podman_container['State']['Running']
|
||||
- image.container is defined
|
||||
- image.container['State']['Running']
|
||||
- "'pulled image alpine:3.7' in image.actions"
|
||||
- "'started container' in image.actions"
|
||||
- image2 is changed
|
||||
- image2.ansible_facts is defined
|
||||
- image2.ansible_facts.podman_container is defined
|
||||
- image2.ansible_facts.podman_container['State']['Running']
|
||||
- image2.container is defined
|
||||
- image2.container['State']['Running']
|
||||
- "'pulled image alpine:3.7' not in image2.actions"
|
||||
- "'started container2' in image2.actions"
|
||||
fail_msg: Pulling image test failed!
|
||||
success_msg: Pulling image test passed!
|
||||
|
||||
- name: Check failed image pull
|
||||
podman_container:
|
||||
name: container
|
||||
image: ineverneverneverexist
|
||||
state: present
|
||||
command: sleep 1d
|
||||
register: imagefail
|
||||
ignore_errors: true
|
||||
|
||||
- name: Check output is correct
|
||||
assert:
|
||||
that:
|
||||
- imagefail is failed
|
||||
- imagefail.msg == "Can't pull image ineverneverneverexist"
|
||||
|
||||
|
||||
- name: Force container recreate
|
||||
podman_container:
|
||||
name: container
|
||||
image: alpine
|
||||
state: present
|
||||
command: sleep 1d
|
||||
recreate: true
|
||||
register: recreated
|
||||
|
||||
- name: Check output is correct
|
||||
assert:
|
||||
that:
|
||||
- recreated is changed
|
||||
- recreated.ansible_facts is defined
|
||||
- recreated.ansible_facts.podman_container is defined
|
||||
- recreated.ansible_facts.podman_container['State']['Running']
|
||||
- "'recreated container' in recreated.actions"
|
||||
fail_msg: Force recreate test failed!
|
||||
success_msg: Force recreate test passed!
|
||||
|
||||
- name: Stop container
|
||||
podman_container:
|
||||
name: container
|
||||
state: stopped
|
||||
register: stopped
|
||||
|
||||
- name: Stop the same container again (idempotency)
|
||||
podman_container:
|
||||
name: container
|
||||
state: stopped
|
||||
register: stopped_again
|
||||
|
||||
- name: Check output is correct
|
||||
assert:
|
||||
that:
|
||||
- stopped is changed
|
||||
- stopped.ansible_facts is defined
|
||||
- stopped.ansible_facts.podman_container is defined
|
||||
- not stopped.ansible_facts.podman_container['State']['Running']
|
||||
- "'stopped container' in stopped.actions"
|
||||
- stopped_again is not changed
|
||||
- stopped_again.ansible_facts is defined
|
||||
- stopped_again.ansible_facts.podman_container is defined
|
||||
- not stopped_again.ansible_facts.podman_container['State']['Running']
|
||||
- stopped_again.actions == []
|
||||
fail_msg: Stopping container test failed!
|
||||
success_msg: Stopping container test passed!
|
||||
|
||||
- name: Delete stopped container
|
||||
podman_container:
|
||||
name: container
|
||||
state: absent
|
||||
register: deleted
|
||||
|
||||
- name: Delete again container (idempotency)
|
||||
podman_container:
|
||||
name: container
|
||||
state: absent
|
||||
register: deleted_again
|
||||
|
||||
- name: Check output is correct
|
||||
assert:
|
||||
that:
|
||||
- deleted is changed
|
||||
- deleted.ansible_facts is defined
|
||||
- deleted.ansible_facts.podman_container is defined
|
||||
- deleted.ansible_facts.podman_container == {}
|
||||
- "'deleted container' in deleted.actions"
|
||||
- deleted_again is not changed
|
||||
- deleted_again.ansible_facts is defined
|
||||
- deleted_again.ansible_facts.podman_container is defined
|
||||
- deleted_again.ansible_facts.podman_container == {}
|
||||
- deleted_again.actions == []
|
||||
fail_msg: Deleting stopped container test failed!
|
||||
success_msg: Deleting stopped container test passed!
|
||||
|
||||
- name: Create container, but don't run
|
||||
podman_container:
|
||||
name: container
|
||||
image: alpine:3.7
|
||||
state: stopped
|
||||
command: sleep 1d
|
||||
register: created
|
||||
|
||||
- name: Check output is correct
|
||||
assert:
|
||||
that:
|
||||
- created is changed
|
||||
- created.ansible_facts is defined
|
||||
- created.ansible_facts.podman_container is defined
|
||||
- created.ansible_facts.podman_container != {}
|
||||
- not created.ansible_facts.podman_container['State']['Running']
|
||||
- "'created container' in created.actions"
|
||||
fail_msg: "Creating stopped container test failed!"
|
||||
success_msg: "Creating stopped container test passed!"
|
||||
|
||||
- name: Delete created container
|
||||
podman_container:
|
||||
name: container
|
||||
state: absent
|
||||
|
||||
- name: Start container that was deleted
|
||||
podman_container:
|
||||
name: container
|
||||
image: alpine:3.7
|
||||
state: started
|
||||
command: sleep 1d
|
||||
register: started
|
||||
|
||||
- name: Check output is correct
|
||||
assert:
|
||||
that:
|
||||
- started is changed
|
||||
- started.ansible_facts is defined
|
||||
- started.ansible_facts.podman_container is defined
|
||||
- started.ansible_facts.podman_container['State']['Running']
|
||||
- started.container is defined
|
||||
- started.container['State']['Running']
|
||||
- "'pulled image alpine:3.7' not in started.actions"
|
||||
|
||||
- name: Delete started container
|
||||
podman_container:
|
||||
name: container
|
||||
state: absent
|
||||
register: deleted
|
||||
|
||||
- name: Delete again container (idempotency)
|
||||
podman_container:
|
||||
name: container
|
||||
state: absent
|
||||
register: deleted_again
|
||||
|
||||
- name: Check output is correct
|
||||
assert:
|
||||
that:
|
||||
- deleted is changed
|
||||
- deleted.ansible_facts is defined
|
||||
- deleted.ansible_facts.podman_container is defined
|
||||
- deleted.ansible_facts.podman_container == {}
|
||||
- "'deleted container' in deleted.actions"
|
||||
- deleted_again is not changed
|
||||
- deleted_again.ansible_facts is defined
|
||||
- deleted_again.ansible_facts.podman_container is defined
|
||||
- deleted_again.ansible_facts.podman_container == {}
|
||||
- deleted_again.actions == []
|
||||
fail_msg: Deleting started container test failed!
|
||||
success_msg: Deleting started container test passed!
|
||||
|
||||
- name: Recreate container with parameters
|
||||
podman_container:
|
||||
name: container
|
||||
image: alpine:3.7
|
||||
state: started
|
||||
command: sleep 1d
|
||||
recreate: true
|
||||
etc_hosts:
|
||||
host1: 127.0.0.1
|
||||
host2: 127.0.0.1
|
||||
annotation:
|
||||
this: "annotation_value"
|
||||
dns:
|
||||
- 1.1.1.1
|
||||
- 8.8.4.4
|
||||
dns_search: example.com
|
||||
cap_add:
|
||||
- SYS_TIME
|
||||
- NET_ADMIN
|
||||
publish:
|
||||
- "9000:80"
|
||||
- "9001:8000"
|
||||
workdir: "/bin"
|
||||
env:
|
||||
FOO: bar
|
||||
BAR: foo
|
||||
TEST: 1
|
||||
BOOL: false
|
||||
group_add: "somegroup"
|
||||
label:
|
||||
somelabel: labelvalue
|
||||
otheralbe: othervalue
|
||||
volumes:
|
||||
- /tmp:/data
|
||||
register: test
|
||||
|
||||
- name: Check output is correct
|
||||
assert:
|
||||
that:
|
||||
- test is changed
|
||||
- test.ansible_facts is defined
|
||||
- test.ansible_facts.podman_container is defined
|
||||
- test.ansible_facts.podman_container != {}
|
||||
- test.ansible_facts.podman_container['State']['Running']
|
||||
# test capabilities
|
||||
- "'CAP_SYS_TIME' in test.ansible_facts.podman_container['BoundingCaps']"
|
||||
- "'CAP_NET_ADMIN' in test.ansible_facts.podman_container['BoundingCaps']"
|
||||
# test annotations
|
||||
- test.ansible_facts.podman_container['Config']['Annotations']['this'] is defined
|
||||
- test.ansible_facts.podman_container['Config']['Annotations']['this'] == "annotation_value"
|
||||
# test DNS
|
||||
- >-
|
||||
(test.ansible_facts.podman_container['HostConfig']['Dns'] is defined and
|
||||
test.ansible_facts.podman_container['HostConfig']['Dns'] == ['1.1.1.1', '8.8.4.4']) or
|
||||
(test.ansible_facts.podman_container['HostConfig']['DNS'] is defined and
|
||||
test.ansible_facts.podman_container['HostConfig']['DNS'] == ['1.1.1.1', '8.8.4.4'])
|
||||
# test ports
|
||||
- test.ansible_facts.podman_container['NetworkSettings']['Ports']|length == 2
|
||||
# test working dir
|
||||
- test.ansible_facts.podman_container['Config']['WorkingDir'] == "/bin"
|
||||
# test dns search
|
||||
- >-
|
||||
(test.ansible_facts.podman_container['HostConfig']['DnsSearch'] is defined and
|
||||
test.ansible_facts.podman_container['HostConfig']['DnsSearch'] == ['example.com']) or
|
||||
(test.ansible_facts.podman_container['HostConfig']['DNSSearch'] is defined and
|
||||
test.ansible_facts.podman_container['HostConfig']['DNSSearch'] == ['example.com'])
|
||||
# test environment variables
|
||||
- "'FOO=bar' in test.ansible_facts.podman_container['Config']['Env']"
|
||||
- "'BAR=foo' in test.ansible_facts.podman_container['Config']['Env']"
|
||||
- "'TEST=1' in test.ansible_facts.podman_container['Config']['Env']"
|
||||
- "'BOOL=False' in test.ansible_facts.podman_container['Config']['Env']"
|
||||
# test labels
|
||||
- test.ansible_facts.podman_container['Config']['Labels'] | length == 2
|
||||
- test.ansible_facts.podman_container['Config']['Labels']['somelabel'] == "labelvalue"
|
||||
- test.ansible_facts.podman_container['Config']['Labels']['otheralbe'] == "othervalue"
|
||||
# test mounts
|
||||
- >-
|
||||
(test.ansible_facts.podman_container['Mounts'][0]['Destination'] is defined and
|
||||
'/data' in test.ansible_facts.podman_container['Mounts'] | map(attribute='Destination') | list) or
|
||||
(test.ansible_facts.podman_container['Mounts'][0]['destination'] is defined and
|
||||
'/data' in test.ansible_facts.podman_container['Mounts'] | map(attribute='destination') | list)
|
||||
- >-
|
||||
(test.ansible_facts.podman_container['Mounts'][0]['Source'] is defined and
|
||||
'/tmp' in test.ansible_facts.podman_container['Mounts'] | map(attribute='Source') | list) or
|
||||
(test.ansible_facts.podman_container['Mounts'][0]['source'] is defined and
|
||||
'/tmp' in test.ansible_facts.podman_container['Mounts'] | map(attribute='source') | list)
|
||||
fail_msg: Parameters container test failed!
|
||||
success_msg: Parameters container test passed!
|
||||
always:
|
||||
- name: Delete all container leftovers from tests
|
||||
podman_container:
|
||||
name: "{{ item }}"
|
||||
state: absent
|
||||
loop:
|
||||
- "alpine:3.7"
|
||||
- "container"
|
||||
- "container2"
|
@ -38,6 +38,6 @@
|
||||
- name: Assert that fedora container has the right image
|
||||
assert:
|
||||
that:
|
||||
- "'fedora:latest' in fedora_infos.ansible_facts.podman_containers.0.ImageName"
|
||||
- "'fedora:latest' in fedora_infos.containers.0.ImageName"
|
||||
fail_msg: 'fedora container has wrong image'
|
||||
success_msg: 'fedora container has the right image'
|
||||
|
@ -32,7 +32,7 @@
|
||||
fail:
|
||||
msg: "Can't run container exec for {{ item.0 }}, {{ item.1.command.0 }} is not running"
|
||||
when:
|
||||
- not podman_containers.ansible_facts.podman_containers.0.State.Running
|
||||
- not podman_containers.0.State.Running
|
||||
- name: "Prepare the exec command for {{ item.0 }}"
|
||||
set_fact:
|
||||
cmd_template:
|
||||
|
@ -39,6 +39,7 @@
|
||||
- tripleo-ansible-centos-7-molecule-tripleo-packages
|
||||
- tripleo-ansible-centos-7-molecule-tripleo-hosts-entries
|
||||
- tripleo-ansible-centos-7-molecule-tripleo-container-manage
|
||||
- tripleo-ansible-centos-7-molecule-tripleo-modules
|
||||
gate:
|
||||
jobs:
|
||||
- tripleo-ansible-centos-7-molecule-aide
|
||||
@ -78,6 +79,7 @@
|
||||
- tripleo-ansible-centos-7-molecule-tripleo-packages
|
||||
- tripleo-ansible-centos-7-molecule-tripleo-hosts-entries
|
||||
- tripleo-ansible-centos-7-molecule-tripleo-container-manage
|
||||
- tripleo-ansible-centos-7-molecule-tripleo-modules
|
||||
name: tripleo-ansible-molecule-jobs
|
||||
- job:
|
||||
files:
|
||||
@ -350,3 +352,11 @@
|
||||
parent: tripleo-ansible-centos-7-base
|
||||
vars:
|
||||
tripleo_role_name: tripleo-container-manage
|
||||
|
||||
- job:
|
||||
files:
|
||||
- ^tripleo_ansible/ansible_plugins/.*$
|
||||
- ^tox.ini
|
||||
- ^molecule-requirements.txt
|
||||
name: tripleo-ansible-centos-7-molecule-tripleo-modules
|
||||
parent: tripleo-ansible-centos-7-base
|
||||
|
@ -4,10 +4,21 @@
|
||||
environment:
|
||||
ANSIBLE_LOG_PATH: "{{ ansible_user_dir }}/zuul-output/logs/ansible-execution.log"
|
||||
pre_tasks:
|
||||
|
||||
- name: Set project path fact
|
||||
set_fact:
|
||||
tripleo_ansible_project_path: "{{ ansible_user_dir }}/{{ zuul.project.src_dir }}"
|
||||
|
||||
- name: Set role or plugin path fact
|
||||
set_fact:
|
||||
triple_ansible_testdir: "{{ tripleo_ansible_project_path }}/tripleo_ansible/roles/{{ tripleo_role_name }}"
|
||||
when: tripleo_role_name is defined and tripleo_role_name
|
||||
|
||||
- name: Set role or plugin path fact
|
||||
set_fact:
|
||||
triple_ansible_testdir: "{{ tripleo_ansible_project_path }}/tripleo_ansible/ansible_plugins/tests"
|
||||
when: tripleo_role_name is not defined
|
||||
|
||||
- name: Set action plugin path fact
|
||||
set_fact:
|
||||
tripleo_action_plugins_paths:
|
||||
@ -25,7 +36,7 @@
|
||||
--ansible-args='{{ tripleo_job_ansible_args | default('') }}' \
|
||||
{{ tripleo_ansible_project_path }}/tests/test_molecule.py
|
||||
args:
|
||||
chdir: "{{ tripleo_ansible_project_path }}/tripleo_ansible/roles/{{ tripleo_role_name }}"
|
||||
chdir: "{{ triple_ansible_testdir }}"
|
||||
executable: /bin/bash
|
||||
environment:
|
||||
ANSIBLE_ACTION_PLUGINS: "{{ tripleo_action_plugins_paths | join(':') }}"
|
||||
|
Loading…
Reference in New Issue
Block a user