diff --git a/changelog/67888.fixed.md b/changelog/67888.fixed.md new file mode 100644 index 000000000000..d2c19844fe98 --- /dev/null +++ b/changelog/67888.fixed.md @@ -0,0 +1 @@ +Added service files for specific rpm packages to /etc/init.d diff --git a/pkg/rpm/salt.spec b/pkg/rpm/salt.spec index bb71fff631b1..ab242d3b7ccd 100644 --- a/pkg/rpm/salt.spec +++ b/pkg/rpm/salt.spec @@ -309,6 +309,13 @@ install -p -m 0644 %{_salt_src}/doc/man/salt-api.1 %{buildroot}%{_mandir}/man1/s install -p -m 0644 %{_salt_src}/doc/man/salt-cloud.1 %{buildroot}%{_mandir}/man1/salt-cloud.1 install -p -m 0644 %{_salt_src}/doc/man/salt-ssh.1 %{buildroot}%{_mandir}/man1/salt-ssh.1 +# Sys V service files +mkdir -p %{buildroot}%{_sysconfdir}/init.d +install -p -m 0755 %{_salt_src}/pkg/rpm/salt-minion %{buildroot}%{_sysconfdir}/init.d/salt-minion +install -p -m 0755 %{_salt_src}/pkg/rpm/salt-master %{buildroot}%{_sysconfdir}/init.d/salt-master +install -p -m 0755 %{_salt_src}/pkg/rpm/salt-syndic %{buildroot}%{_sysconfdir}/init.d/salt-syndic +install -p -m 0755 %{_salt_src}/pkg/rpm/salt-api %{buildroot}%{_sysconfdir}/init.d/salt-api + %clean rm -rf %{buildroot} @@ -361,6 +368,7 @@ rm -rf %{buildroot} %dir %attr(0750, salt, salt) %{_var}/cache/salt/master/roots/ %dir %attr(0750, salt, salt) %{_var}/cache/salt/master/syndics/ %dir %attr(0750, salt, salt) %{_var}/cache/salt/master/tokens/ +%{_sysconfdir}/init.d/salt-master %files minion @@ -378,12 +386,14 @@ rm -rf %{buildroot} %config(noreplace) %{_sysconfdir}/salt/pki/minion %dir %{_sysconfdir}/salt/minion.d %dir %attr(0750, root, root) %{_var}/cache/salt/minion/ +%{_sysconfdir}/init.d/salt-minion %files syndic %doc %{_mandir}/man1/salt-syndic.1* %{_bindir}/salt-syndic %{_unitdir}/salt-syndic.service +%{_sysconfdir}/init.d/salt-syndic %files api @@ -391,6 +401,7 @@ rm -rf %{buildroot} %doc %{_mandir}/man1/salt-api.1* %{_bindir}/salt-api %{_unitdir}/salt-api.service +%{_sysconfdir}/init.d/salt-api %files cloud diff --git a/tests/pytests/pkg/upgrade/test_salt_upgrade.py b/tests/pytests/pkg/upgrade/test_salt_upgrade.py index 1f07014571b0..f648a1794858 100644 --- a/tests/pytests/pkg/upgrade/test_salt_upgrade.py +++ b/tests/pytests/pkg/upgrade/test_salt_upgrade.py @@ -1,4 +1,6 @@ import logging +import os +import subprocess import sys import time @@ -7,6 +9,8 @@ import pytest from pytestskipmarkers.utils import platform +import salt.utils.path + log = logging.getLogger(__name__) @@ -132,6 +136,62 @@ def _get_running_named_salt_pid(process_name): return pids +def test_salt_sysv_service_files(install_salt): + """ + Test an upgrade of Salt, Minion and Master + """ + if not install_salt.upgrade: + pytest.skip("Not testing an upgrade, do not run") + + if sys.platform != "linux": + pytest.skip("Not testing on a Linux platform, do not run") + + if not (salt.utils.path.which("dpkg") or salt.utils.path.which("rpm")): + pytest.skip("Not testing on a Debian or RedHat family platform, do not run") + + test_pkgs = install_salt.pkgs + for test_pkg_name in test_pkgs: + test_pkg_basename = os.path.basename(test_pkg_name) + # Debian/Ubuntu name typically salt-minion_300xxxxxx + # Redhat name typically salt-minion-300xxxxxx + test_pkg_basename_dash_underscore = test_pkg_basename.split("300")[0] + test_pkg_basename_adj = test_pkg_basename_dash_underscore[:-1] + if test_pkg_basename_adj in ( + "salt-minion", + "salt-master", + "salt-syndic", + "salt-api", + ): + test_initd_name = f"/etc/init.d/{test_pkg_basename_adj}" + if salt.utils.path.which("dpkg"): + if os.path.exists("/etc/debian_version"): + proc = subprocess.run( + ["dpkg", "-c", f"{test_pkg_name}"], + capture_output=True, + check=True, + ) + else: + proc = subprocess.run( + ["dpkg", "-q", "-c", f"{test_pkg_name}"], + capture_output=True, + check=True, + ) + elif salt.utils.path.which("rpm"): + proc = subprocess.run( + ["rpm", "-q", "-l", "-p", f"{test_pkg_name}"], + capture_output=True, + check=True, + ) + found_line = False + for line in proc.stdout.decode().splitlines(): + # If test_initd_name not present we should fail. + if line == test_initd_name: + found_line = True + break + + assert found_line + + def test_salt_upgrade(salt_call_cli, install_salt): """ Test an upgrade of Salt, Minion and Master