New validation: detect failed containers

Failed containers are pretty bad, since we have a degraded service.

Running this validation before an upgrade is a good thing, and
running it after a deploy/upgrade will ensure we're in a right state

Co-Authored-by: Gaël Chamoulaud <gchamoul@redhat.com>
Change-Id: I242f1c7cff76e8304696ea10b32c1545fa5b8ea5
This commit is contained in:
Cédric Jeanneret 2019-05-01 21:27:25 +02:00
parent 1d85e29f79
commit bd8cdf41a5
3 changed files with 64 additions and 0 deletions

View File

@ -0,0 +1,6 @@
================
container-status
================
.. ansibleautoplugin::
:role: roles/container-status

View File

@ -0,0 +1,13 @@
---
- hosts: undercloud, overcloud
vars:
metadata:
name: Ensure container status
description: >
Detect failed containers and raise an error.
groups:
- pre-upgrade
- post-deployment
- post-upgrade
roles:
- container-status

View File

@ -0,0 +1,45 @@
---
- name: Set oc_container_cli fact for the Overcloud nodes
set_fact:
oc_container_cli: "{{ hostvars[inventory_hostname].container_cli | default('podman', true) }}"
when:
- "'overcloud' in group_names"
- oc_container_cli is not defined
- when: "'Undercloud' in group_names"
block:
- name: Set container_cli fact from undercloud.conf
block:
- name: Get the path of tripleo undercloud config file
become: true
hiera:
name: "tripleo_undercloud_conf_file"
- name: Get container client from undercloud.conf
ini:
path: "{{ tripleo_undercloud_conf_file }}"
section: DEFAULT
key: container_cli
ignore_missing_file: true
register: container_cli
- name: Set uc_container_cli for the Undercloud
set_fact:
uc_container_cli: "{{ container_cli.value|default('podman', true) }}"
when: uc_container_cli is not defined
- name: Get failed containers for podman
changed_when: false
become: True
command: >
{% if oc_container_cli is defined %}{{ oc_container_cli }}{% else %}{{ uc_container_cli }}{% endif %}
{% raw %}
ps -a --filter 'status=exited' --format '{{ .Names }} {{ .Status }}'
{% endraw %}
register: failed_containers
- name: Fail if we detect failed containers
fail:
msg: "Failed container detected: {{ item }}."
when: item is not match(".* Exited \(0\) .* ago")
loop: "{{ failed_containers.stdout_lines }}"