From e11f86aecadd0a52eda4fbcdedd2ecfe6b5892b5 Mon Sep 17 00:00:00 2001 From: yatinkarel Date: Thu, 20 May 2021 18:09:36 +0530 Subject: [PATCH] Add support for EL9 and python3.9 Following is done:- - Using distro module to get distribution as platform module no longer provide that with python3.8+[1]. - Use mariadb-server-galera as mariadb don't provide mariadb-galera-server in EL9[2]. - Ensure 'cronie' package is installed before attempting start of crond service. [1] https://bugs.python.org/issue28167 [2] https://src.fedoraproject.org/rpms/mariadb/c/b1bc71c1a Change-Id: I744de28a25739c00f585b7d9c12627ce0ed902f2 --- packstack/plugins/nova_300.py | 4 ++-- packstack/plugins/prescript_000.py | 10 +++++----- .../puppet/modules/packstack/lib/facter/mariadb.rb | 4 ++-- .../puppet/modules/packstack/manifests/keystone.pp | 9 +++++++-- .../puppet/modules/packstack/manifests/mariadb.pp | 4 ++-- requirements.txt | 1 + tests/installer/test_run_setup.py | 5 +++++ 7 files changed, 24 insertions(+), 13 deletions(-) diff --git a/packstack/plugins/nova_300.py b/packstack/plugins/nova_300.py index 5fd6da0c8..2b2da3d04 100644 --- a/packstack/plugins/nova_300.py +++ b/packstack/plugins/nova_300.py @@ -16,8 +16,8 @@ Installs and configures Nova """ +import distro import os -import platform import socket from packstack.installer import basedefs @@ -38,7 +38,7 @@ PLUGIN_NAME_COLORED = utils.color_text(PLUGIN_NAME, 'blue') def initConfig(controller): - if platform.linux_distribution()[0] == "Fedora": + if distro.linux_distribution()[0] == "Fedora": primary_netif = "em1" secondary_netif = "em2" else: diff --git a/packstack/plugins/prescript_000.py b/packstack/plugins/prescript_000.py index aebed36c7..2e6d30228 100755 --- a/packstack/plugins/prescript_000.py +++ b/packstack/plugins/prescript_000.py @@ -16,10 +16,10 @@ Plugin responsible for setting OpenStack global options """ +import distro import os import re import logging -import platform import glob import os import uuid @@ -949,16 +949,16 @@ def initSequences(controller): def is_rhel(): - return 'Red Hat Enterprise Linux' in platform.linux_distribution()[0] + return 'Red Hat Enterprise Linux' in distro.linux_distribution()[0] def detect_os_and_version(host): server = utils.ScriptRunner(host) server.append( - 'python -c "import platform; ' - 'print platform.linux_distribution(full_distribution_name=0)[0]' + 'python -c "import distro; ' + 'print distro.linux_distribution(full_distribution_name=0)[0]' '+\',\'+' - 'platform.linux_distribution()[1]"' + 'distro.linux_distribution()[1]"' ) try: rc, out = server.execute() diff --git a/packstack/puppet/modules/packstack/lib/facter/mariadb.rb b/packstack/puppet/modules/packstack/lib/facter/mariadb.rb index f2c35f276..02877bb67 100644 --- a/packstack/puppet/modules/packstack/lib/facter/mariadb.rb +++ b/packstack/puppet/modules/packstack/lib/facter/mariadb.rb @@ -4,9 +4,9 @@ Facter.add(:mariadb_provides_galera) do setcode do if Facter.value(:operatingsystem) == 'Fedora' and Facter.value(:operatingsystemmajrelease).to_i > 22 - command = 'dnf repoquery --whatprovides mariadb-galera-server' + command = 'dnf repoquery --whatprovides mariadb-server-galera' else - command = 'repoquery --whatprovides mariadb-galera-server' + command = 'repoquery --whatprovides mariadb-server-galera' end output = Facter::Util::Resolution.exec(command) (output =~ /mariadb-server-galera.*/) != nil diff --git a/packstack/puppet/modules/packstack/manifests/keystone.pp b/packstack/puppet/modules/packstack/manifests/keystone.pp index 84a3d5b40..e7aa37ef9 100644 --- a/packstack/puppet/modules/packstack/manifests/keystone.pp +++ b/packstack/puppet/modules/packstack/manifests/keystone.pp @@ -15,9 +15,14 @@ class packstack::keystone () class { 'keystone::cron::fernet_rotate': require => Service['crond'], } + package { 'cronie': + ensure => 'installed', + name => 'cronie', + } service { 'crond': - ensure => 'running', - enable => true, + ensure => 'running', + enable => true, + require => Package['cronie'], } } diff --git a/packstack/puppet/modules/packstack/manifests/mariadb.pp b/packstack/puppet/modules/packstack/manifests/mariadb.pp index 3b107c5c1..a03a2d17c 100644 --- a/packstack/puppet/modules/packstack/manifests/mariadb.pp +++ b/packstack/puppet/modules/packstack/manifests/mariadb.pp @@ -9,8 +9,8 @@ class packstack::mariadb () $mariadb_package_name = 'mariadb-server-galera' $mariadb_present = 'present' } else { - # Package mariadb-server conflicts with mariadb-galera-server - $mariadb_package_name = 'mariadb-galera-server' + # Package mariadb-server conflicts with mariadb-server-galera + $mariadb_package_name = 'mariadb-server-galera' $mariadb_present = 'absent' } ensure_packages(['mariadb-server'], {'ensure' => $mariadb_present}) diff --git a/requirements.txt b/requirements.txt index 5b932c089..27433009e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,3 +4,4 @@ PyYAML>=3.10 docutils>=0.11 pyOpenSSL>=16.2.0 netifaces +distro diff --git a/tests/installer/test_run_setup.py b/tests/installer/test_run_setup.py index 15f22dfa0..85d0f825a 100644 --- a/tests/installer/test_run_setup.py +++ b/tests/installer/test_run_setup.py @@ -26,6 +26,7 @@ from packstack.modules import puppet from packstack.installer import basedefs from packstack.installer import run_setup from packstack.installer import validators +from packstack.plugins.nova_300 import distro from ..test_base import FakePopen from ..test_base import PackstackTestCaseMixin @@ -110,6 +111,10 @@ class CommandLineTestCase(PackstackTestCaseMixin, TestCase): puppet.validate_logfile = lambda a: None puppet.scan_logfile = lambda a: [] + # mock distro.linux_distribution, it's does subprocess.check_output + # lsb_release -a + distro.linux_distribution = lambda: "CentOS" + # If there is a error in a plugin sys.exit() gets called, this masks # the actual error that should be reported, so we replace it to # raise Exception, packstack logging gives a more infomrative error