system-config/testinfra/test_eavesdrop.py
Ian Wienand 694241ad77 docker: install rsyslog to capture container output
This started with me wondering why gerritbot was putting all its
output into /var/log/syslog -- it turns out Xenial docker is
configured to use journalctl (which forwards to syslog) and Bionic
onwards uses json-file.

Both are sub-optimial; but particularly the json-file because we lose
the logs when the container dies.  This proposes moving to a more
standard model of having the containers log to syslog and redirecting
that to files on disk.

Install a rsyslog configuration to capture "docker-*" program names
and put them into logfiles in /var/log/containers.  Also install
rotation for these files.

In an initial group of docker-compose files, setup logging to syslog
which should then be captured into these files.  Add some basic
testing.

If this works OK, I think we can standardise our docker-compose files
like this to caputure the logs the same everywhere.

Change-Id: I940a5b05057e832e2efad79d9a2ed5325020ed0c
2020-10-19 16:06:03 +11:00

39 lines
1.3 KiB
Python

# Copyright 2018 Red Hat, Inc.
#
# 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.
testinfra_hosts = ['eavesdrop01.openstack.org']
def test_eavesdrop(host):
rules = host.iptables.rules()
rules = [x.strip() for x in rules]
web = ('-A openstack-INPUT -p tcp -m state --state NEW'
' -m tcp --dport 80 -j ACCEPT')
assert web in rules
def test_gerritbot_logs(host):
log_file = host.file('/var/log/containers/docker-gerritbot.log')
# A simple check that docker-compose and our container did something
# We expect auth to fail so check that it did
assert log_file.contains("Authentication (publickey) failed")
def test_gerritbot_running(host):
# Check that the container hasn't stopped
cmd = host.run("docker ps -a")
assert 'gerritbot-docker_gerritbot_1' in cmd.stdout
assert 'Up ' in cmd.stdout