From 8f79fce5afd86c0c093807452b173bb7e1ca123c Mon Sep 17 00:00:00 2001 From: Kentaro Hayashi Date: Mon, 11 Dec 2023 10:57:08 +0900 Subject: [PATCH] github: check downgrade to v4 To downgrade correctly you must: * Remove fluent-package in beforehand. * Re-install td-agent v4. * Manually migrate buffer or logs Signed-off-by: Kentaro Hayashi --- .../apt/systemd-test/downgrade-to-v4.sh | 79 ++++++++++++++++ fluent-package/apt/systemd-test/test.sh | 1 + .../yum/systemd-test/downgrade-to-v4.sh | 89 +++++++++++++++++++ fluent-package/yum/systemd-test/test.sh | 1 + 4 files changed, 170 insertions(+) create mode 100755 fluent-package/apt/systemd-test/downgrade-to-v4.sh create mode 100755 fluent-package/yum/systemd-test/downgrade-to-v4.sh diff --git a/fluent-package/apt/systemd-test/downgrade-to-v4.sh b/fluent-package/apt/systemd-test/downgrade-to-v4.sh new file mode 100755 index 000000000..96b962d3c --- /dev/null +++ b/fluent-package/apt/systemd-test/downgrade-to-v4.sh @@ -0,0 +1,79 @@ +#!/bin/bash + +set -exu + +. $(dirname $0)/../commonvar.sh + +# Install v4 +sudo apt install -y curl ca-certificates +curl -fsSL https://toolbelt.treasuredata.com/sh/install-${distribution}-${code_name}-td-agent4.sh | sh + +# td-agent is running +systemctl status --no-pager td-agent + +# fluent-package 5 (LTS) +#curl -fsSL https://toolbelt.treasuredata.com/sh/install-${distribution}-${code_name}-fluent-package5-lts.sh | sh +#sudo apt purge -y fluent-lts-apt-source + +# Ensure to install the current +sudo apt install -V -y \ + /host/${distribution}/pool/${code_name}/${channel}/*/*/fluent-package_*_${architecture}.deb + +# td-agent.service is already masked (link to /dev/null), and remove td-agent.service alias not to conflict with v4 +sudo systemctl unmask td-agent + +# Keep log and .conf and so on. dpkg reports "rc fluent-package" and "rc td-agent" status. +sudo apt remove -y fluent-package td-agent + +# fluentd.service is already masked (link to /dev/null), then remove it. +sudo systemctl unmask fluentd + +# Drop symbolic links and recreate real directory. +sudo rm -f /var/log/td-agent +sudo rm -f /etc/td-agent +sudo mkdir -p /var/log/td-agent +sudo chown td-agent:td-agent /var/log/td-agent + +# Migrate logs +sudo mv /var/log/fluent/* /var/log/td-agent/ + +# Reinstall v4, but /etc/td-agent is empty. +curl -fsSL https://toolbelt.treasuredata.com/sh/install-${distribution}-${code_name}-td-agent4.sh | sh +sudo mv /etc/fluent/td-agent.conf /etc/td-agent/ + +sudo systemctl enable td-agent +sudo systemctl start td-agent + +# Test: service status +(! systemctl status --no-pager fluentd) +(systemctl status --no-pager td-agent) + +# Test: config migration +test -d /etc/td-agent +(! test -h /etc/td-agent/fluentd.conf) +test -e /etc/td-agent/td-agent.conf + +# Test: log file migration +test -d /var/log/td-agent +test -e /var/log/td-agent/td-agent.log + +# Test: bin file migration +test -x /usr/sbin/td-agent +test -x /usr/sbin/td-agent-gem + +# Test: environmental variables +pid=$(systemctl show td-agent --property=MainPID --value) +env_vars=$(sudo sed -e 's/\x0/\n/g' /proc/$pid/environ) +test $(eval $env_vars && echo $HOME) = "/var/lib/td-agent" +test $(eval $env_vars && echo $LOGNAME) = "td-agent" +test $(eval $env_vars && echo $USER) = "td-agent" +test $(eval $env_vars && echo $FLUENT_CONF) = "/etc/td-agent/td-agent.conf" +test $(eval $env_vars && echo $TD_AGENT_LOG_FILE) = "/var/log/td-agent/td-agent.log" +test $(eval $env_vars && echo $FLUENT_PLUGIN) = "/etc/td-agent/plugin" +test $(eval $env_vars && echo $FLUENT_SOCKET) = "/var/run/td-agent/td-agent.sock" + +# Test: No error logs +# (v4 default config outputs 'warn' log, so we should check only 'error' and 'fatal' logs) +sleep 3 +test -e /var/log/td-agent/td-agent.log +(! grep -e '\[error\]' -e '\[fatal\]' /var/log/td-agent/td-agent.log) diff --git a/fluent-package/apt/systemd-test/test.sh b/fluent-package/apt/systemd-test/test.sh index 67c98b115..247cbaf51 100755 --- a/fluent-package/apt/systemd-test/test.sh +++ b/fluent-package/apt/systemd-test/test.sh @@ -20,6 +20,7 @@ if [ ! $image = "images:debian/12" ]; then test_filenames+=( update-from-v4.sh update-to-next-version-with-backward-compat-for-v4.sh + downgrade-to-v4.sh ) fi diff --git a/fluent-package/yum/systemd-test/downgrade-to-v4.sh b/fluent-package/yum/systemd-test/downgrade-to-v4.sh new file mode 100755 index 000000000..f97fccc61 --- /dev/null +++ b/fluent-package/yum/systemd-test/downgrade-to-v4.sh @@ -0,0 +1,89 @@ +#!/bin/bash + +set -exu + +. $(dirname $0)/commonvar.sh + +# Install v4 +case ${distribution} in + amazon) + curl -fsSL https://toolbelt.treasuredata.com/sh/install-amazon2-td-agent.sh | sh + ;; + *) + curl -fsSL https://toolbelt.treasuredata.com/sh/install-redhat-td-agent4.sh | sh + ;; +esac + +# Not auto started +(!systemctl status --no-pager td-agent) + +# Start service to generate log +sudo systemctl enable --now td-agent +sudo systemctl stop td-agent + +# Install the current +sudo $DNF install -y \ + /host/${distribution}/pool/${code_name}/${channel}/*/*/fluent-package_*_${architecture}.deb + +sudo systemctl daemon-reload +sudo systemctl enable --now fluentd +sudo systemctl stop fluentd + +# Remove td-agent.service alias not to conflict with v4 +sudo systemctl disable td-agent + +sudo $DNF remove fluent-package + +sudo rm -f /var/log/td-agent +sudo rm -f /etc/td-agent +sudo mkdir -p /var/log/td-agent +sudo chown td-agent:td-agent /var/log/td-agent + +sudo mv /var/log/fluent/* /var/log/td-agent/ + +# Downgrade to v4 +case ${distribution} in + amazon) + curl -fsSL https://toolbelt.treasuredata.com/sh/install-amazon2-td-agent.sh | sh + ;; + *) + curl -fsSL https://toolbelt.treasuredata.com/sh/install-redhat-td-agent4.sh | sh + ;; +esac + +sudo systemctl daemon-reload +sudo systemctl enable --now td-agent + +# Test: service status +(!systemctl status --no-pager fluentd) +(systemctl status --no-pager td-agent) + +# Test: config migration +test -d /etc/td-agent +(! test -h /etc/td-agent/fluentd.conf) +test -e /etc/td-agent/td-agent.conf + +# Test: log file migration +test -d /var/log/td-agent +test -e /var/log/td-agent/td-agent.log + +# Test: bin file migration +test -x /usr/sbin/td-agent +test -x /usr/sbin/td-agent-gem + +# Test: environmental variables +pid=$(systemctl show td-agent --property=MainPID --value) +env_vars=$(sudo sed -e 's/\x0/\n/g' /proc/$pid/environ) +test $(eval $env_vars && echo $HOME) = "/var/lib/td-agent" +test $(eval $env_vars && echo $LOGNAME) = "td-agent" +test $(eval $env_vars && echo $USER) = "td-agent" +test $(eval $env_vars && echo $FLUENT_CONF) = "/etc/td-agent/td-agent.conf" +test $(eval $env_vars && echo $TD_AGENT_LOG_FILE) = "/var/log/td-agent/td-agent.log" +test $(eval $env_vars && echo $FLUENT_PLUGIN) = "/etc/td-agent/plugin" +test $(eval $env_vars && echo $FLUENT_SOCKET) = "/var/run/td-agent/td-agent.sock" + +# Test: No error logs +# (v4 default config outputs 'warn' log, so we should check only 'error' and 'fatal' logs) +sleep 3 +test -e /var/log/td-agent/td-agent.log +(! grep -e '\[error\]' -e '\[fatal\]' /var/log/td-agent/td-agent.log) diff --git a/fluent-package/yum/systemd-test/test.sh b/fluent-package/yum/systemd-test/test.sh index 7ccd2b56c..6e1a35e84 100755 --- a/fluent-package/yum/systemd-test/test.sh +++ b/fluent-package/yum/systemd-test/test.sh @@ -20,6 +20,7 @@ if [ ! $image = "images:amazonlinux/2023" ]; then test_filenames+=( update-from-v4.sh update-to-next-version-with-backward-compat-for-v4.sh + downgrade-to-v4.sh ) fi