Skip to content

Commit 1697d35

Browse files
author
relkaboussi
committed
Add ELS Actor handler
1 parent ffba452 commit 1697d35

File tree

2 files changed

+140
-0
lines changed

2 files changed

+140
-0
lines changed
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import os
2+
3+
from leapp.actors import Actor
4+
from leapp.libraries.common.cllaunch import run_on_cloudlinux
5+
from leapp.libraries.stdlib import run
6+
from leapp.tags import DownloadPhaseTag, IPUWorkflowTag
7+
8+
9+
class HandleElsPackages(Actor):
10+
name = "handle_els_packages"
11+
consumes = ()
12+
produces = ()
13+
tags = (DownloadPhaseTag.Before, IPUWorkflowTag)
14+
15+
@run_on_cloudlinux
16+
def process(self):
17+
try:
18+
script_path = self.get_file_path("els_script_handler.sh")
19+
os.chmod(script_path, 0o755)
20+
result = run([script_path])
21+
if result["exit_code"] != 0:
22+
self.log.error(
23+
"Cleanup script failed with exit code: %d\nError: %s",
24+
result["exit_code"],
25+
result["stderr"],
26+
)
27+
else:
28+
self.log.info("Cleanup script executed successfully")
29+
except Exception as e:
30+
self.log.error("Failed to execute cleanup script: %s", str(e))
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
#!/bin/bash
2+
3+
OS_VERSION="$(rpm -q --qf '%{version}' $(rpm -q --whatprovides redhat-release 2>/dev/null) 2>/dev/null | cut -c 1)"
4+
BACKUP="/etc/cl-elevate-saved"
5+
log=/var/log/elevate_els_packages.log
6+
7+
# Create log directory if it doesn't exist
8+
mkdir -p "$(dirname "$log")"
9+
touch "$log"
10+
11+
# Start logging
12+
echo "Starting ELS package handling at $(date)" | tee -a "${log}"
13+
14+
mkdir -p "${BACKUP}" 2>/dev/null || {
15+
echo "Failed to create backup directory ${BACKUP}" | tee -a "${log}"
16+
exit 1
17+
}
18+
19+
# Only proceed for CentOS 7
20+
if [[ "$OS_VERSION" != "7" ]]; then
21+
echo "Not Cloudlinux 7, skipping ELS processing" | tee -a "${log}"
22+
exit 0
23+
fi
24+
25+
# Check if ELS repositories are present
26+
if ! ls /etc/yum.repos.d/centos*els*.repo &> /dev/null; then
27+
echo "No ELS repositories found, skipping processing" | tee -a "${log}"
28+
exit 0
29+
fi
30+
31+
echo "ELS repositories detected. Processing ELS packages before conversion..." | tee -a "${log}"
32+
33+
# Create package backup list
34+
rpm -qa | sort > "${BACKUP}/els_packages_backup_$(date +%Y%m%d_%H%M%S).txt" || {
35+
echo "Warning: Failed to create package backup list" | tee -a "${log}"
36+
}
37+
38+
# Prevent ELS packages from being reinstalled
39+
if ! grep -q "exclude=\*.tuxcare.els\*" /etc/yum.conf; then
40+
{
41+
echo
42+
echo "# Added by elevate"
43+
echo "exclude=*.tuxcare.els*"
44+
} >> /etc/yum.conf || echo "Warning: Failed to add exclusion to yum.conf" | tee -a "${log}"
45+
fi
46+
47+
# Save and disable ELS repos
48+
cp /etc/yum.repos.d/centos*els*.repo "${BACKUP}/" 2>&1 | tee -a "${log}" || true
49+
echo "Disabling ELS repositories..." | tee -a "${log}"
50+
yum-config-manager --disable centos7-els 2>&1 | tee -a "${log}" || true
51+
for i in {1..6}; do
52+
yum-config-manager --disable centos7els-rollout-$i 2>&1 | tee -a "${log}" || true
53+
done
54+
55+
# Remove els-define package first if present
56+
if rpm -q els-define &> /dev/null; then
57+
yum remove -y els-define 2>&1 | tee -a "${log}" || echo "Warning: Failed to remove els-define" | tee -a "${log}"
58+
fi
59+
60+
# Get list of installed ELS packages
61+
echo "Checking for ELS packages..." | tee -a "${log}"
62+
els_pkgs=$(rpm -qa | grep -E '\.tuxcare\.els[0-9]') || true
63+
64+
if [ -n "$els_pkgs" ]; then
65+
echo "Found ELS packages:" | tee -a "${log}"
66+
echo "$els_pkgs" | tee -a "${log}"
67+
68+
# Create a yum shell script to handle the transaction
69+
TMPFILE=$(mktemp)
70+
echo "# yum shell commands" > "$TMPFILE"
71+
72+
# Process each package
73+
while read -r pkg; do
74+
base_name=$(echo "$pkg" | awk -F'-[0-9]' '{print $1}')
75+
if [ -n "$base_name" ]; then
76+
echo "remove $pkg" >> "$TMPFILE"
77+
echo "install $base_name" >> "$TMPFILE"
78+
fi
79+
done <<< "$els_pkgs"
80+
81+
echo "run" >> "$TMPFILE"
82+
echo "exit" >> "$TMPFILE"
83+
84+
# Execute the yum shell script
85+
echo "Replacing ELS packages with base versions..." | tee -a "${log}"
86+
if ! yum shell -y "$TMPFILE" 2>&1 | tee -a "${log}"; then
87+
echo "Trying alternative approach..." | tee -a "${log}"
88+
while read -r pkg; do
89+
base_name=$(echo "$pkg" | awk -F'-[0-9]' '{print $1}')
90+
if [ -n "$base_name" ]; then
91+
yum downgrade -y "$base_name" 2>&1 | tee -a "${log}" || true
92+
fi
93+
done <<< "$els_pkgs"
94+
fi
95+
rm -f "$TMPFILE"
96+
fi
97+
98+
# Move ELS repo files to backup and clean up
99+
mv -f /etc/yum.repos.d/centos*els*.repo "${BACKUP}/" 2>&1 | tee -a "${log}" || true
100+
101+
# Remove TuxCare GPG key if it exists
102+
if [ -f "/etc/pki/rpm-gpg/RPM-GPG-KEY-TuxCare" ]; then
103+
mv -f "/etc/pki/rpm-gpg/RPM-GPG-KEY-TuxCare" "${BACKUP}/" 2>&1 | tee -a "${log}" || true
104+
fi
105+
106+
# Clean yum cache
107+
yum clean all 2>&1 | tee -a "${log}" || true
108+
109+
echo "ELS package handling complete" | tee -a "${log}"
110+
exit 0

0 commit comments

Comments
 (0)