Skip to content

Commit

Permalink
Revert satellite version enhancement and Enhance "CapsuleVersion" only (
Browse files Browse the repository at this point in the history
#3342)

* Revert "fix: Enhance combiner "SatelliteVersion" and "CapsuleVersion" (#3336)"

This reverts commit d4d7c0a.

Signed-off-by: Huanhuan Li <[email protected]>

* fix: Enhance "CapsuleVersion"

* From some archives, I found "foreman" is installed with "satellite-capsule", but
  it is a true satellite capsule server.

Signed-off-by: Huanhuan Li <[email protected]>
(cherry picked from commit 3181747)
  • Loading branch information
huali027 authored and xiangce committed Feb 22, 2022
1 parent 7dfcddf commit 8fdfcd3
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 165 deletions.
27 changes: 6 additions & 21 deletions insights/combiners/satellite_version.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,6 @@
from insights import combiner, SkipComponent
from insights.parsers.satellite_version import Satellite6Version as Sat6Ver
from insights.parsers.installed_rpms import InstalledRpms
from insights.parsers.rhsm_conf import RHSMConf
from insights.combiners.hostname import Hostname
from insights.parsers.ssl_certificate import RhsmKatelloDefaultCACert


# NOTE:
Expand Down Expand Up @@ -49,8 +46,6 @@
'6.1.12': ('1.7.2.63', '0.9.49.23', '2.2.0.19'),
}

CND_HOSTNAMES = ['subscription.rhn.redhat.com', 'subscription.rhsm.redhat.com', 'subscription.rhsm.stage.redhat.com']


def _parse_sat_version(version):
ver_sp = version.split(".") if version else []
Expand All @@ -59,7 +54,7 @@ def _parse_sat_version(version):
return [major, minor]


@combiner(InstalledRpms, optional=[Sat6Ver, RHSMConf, Hostname, RhsmKatelloDefaultCACert])
@combiner(InstalledRpms, optional=[Sat6Ver])
class SatelliteVersion(object):
"""
Check the parsers
Expand Down Expand Up @@ -127,7 +122,7 @@ class SatelliteVersion(object):
>>> sat_ver.release
'1.el7sat'
"""
def __init__(self, rpms, sat6_ver, rhsm_conf, hostname, ca_cert):
def __init__(self, rpms, sat6_ver):
self.full = None
self.version = None
self.release = None
Expand All @@ -145,16 +140,6 @@ def __init__(self, rpms, sat6_ver, rhsm_conf, hostname, ca_cert):
# For Satellite 6.2 and newer, check the satellite package directly
sat62_pkg = rpms.get_max('satellite')
if sat62_pkg:
if rhsm_conf:
if not rhsm_conf.has_option('server', 'hostname'):
raise SkipComponent("Not a Satellite server host.")
if rhsm_conf.get('server', 'hostname') not in CND_HOSTNAMES:
# check if satellite register to itself
if not hostname or not (
(hostname.hostname in rhsm_conf.get('server', 'hostname')) or
(ca_cert and 'issuer' in ca_cert and hostname.fqdn in ca_cert['issuer'])
):
raise SkipComponent("Not a Satellite server host.")
self.full = sat62_pkg.package
self.version = sat62_pkg.version
self.release = sat62_pkg.release
Expand Down Expand Up @@ -183,7 +168,7 @@ def __init__(self, rpms, sat6_ver, rhsm_conf, hostname, ca_cert):
raise SkipComponent("Not a Satellite machine or unable to determine Satellite version")


@combiner(InstalledRpms, optional=[RHSMConf])
@combiner(InstalledRpms, optional=[SatelliteVersion])
class CapsuleVersion(object):
"""
Check the parser
Expand Down Expand Up @@ -225,18 +210,18 @@ class CapsuleVersion(object):
>>> cap_ver.release
'1.el7sat'
"""
def __init__(self, rpms, rhsm_conf):
def __init__(self, rpms, sat_server):
self.full = None
self.version = None
self.release = None
self.major = None
self.minor = None

if sat_server:
raise SkipComponent('Not a Satellite Capsule machine')
# For Capsule, ONLY 6.2 and newer are supported
sat62_pkg = rpms.get_max('satellite-capsule')
if sat62_pkg:
if rhsm_conf and rhsm_conf.get('server', 'hostname') in CND_HOSTNAMES:
raise SkipComponent("Not a Satellite Capsule host.")
self.full = sat62_pkg.package
self.version = sat62_pkg.version
self.release = sat62_pkg.release
Expand Down
178 changes: 34 additions & 144 deletions insights/combiners/tests/test_satellite_version.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,6 @@
from insights.parsers.satellite_version import Satellite6Version
from insights.combiners import satellite_version
from insights.combiners.satellite_version import SatelliteVersion, CapsuleVersion
from insights.parsers.ssl_certificate import RhsmKatelloDefaultCACert
from insights.parsers.rhsm_conf import RHSMConf
from insights.combiners.hostname import Hostname
from insights.parsers.hostname import Hostname as Hnf
from insights.tests import context_wrap
from insights import SkipComponent
import pytest
Expand Down Expand Up @@ -52,83 +48,6 @@
satellite-capsule-6.2.0.11-1.el7sat.noarch Wed May 18 14:16:25 2016
"""

BOTH_SATELLITE_AND_SATELLITE_CAPSULE = """
scl-utils-20120927-27.el7_6.x86_64 Wed May 18 14:18:16 2016
SDL-1.2.14-6.el7.x86_64 Wed May 18 14:16:25 2016
satellite-capsule-6.8.0.11-1.el7sat.noarch Wed May 18 14:16:25 2016
satellite-6.8.0.11-1.el7sat.noarch Wed May 18 14:16:25 2016
foreman.el7.x86_64 Wed May 18 14:16:25 2016
"""

RHSM_CONF_CDN = """
# Red Hat Subscription Manager Configuration File:
# Unified Entitlement Platform Configuration
[server]
# Server hostname:
hostname = subscription.rhsm.redhat.com
# Server prefix:
prefix = /subscription
# Server port:
port = 443
# Set to 1 to disable certificate validation:
insecure = 0
# Set the depth of certs which should be checked
# when validating a certificate
ssl_verify_depth = 3
"""

RHSM_CONF_NON_CDN = """
# Red Hat Subscription Manager Configuration File:
# Unified Entitlement Platform Configuration
[server]
# Server hostname:
hostname = abc.def.fg.com
# Server prefix:
prefix = /subscription
# Server port:
port = 443
# Set to 1 to disable certificate validation:
insecure = 0
# Set the depth of certs which should be checked
# when validating a certificate
ssl_verify_depth = 3
"""

RHSM_CONF_CDN_NO_HOSTNAME = """
# Red Hat Subscription Manager Configuration File:
# Unified Entitlement Platform Configuration
[server]
# Server hostname:
"""

HOSTNAME_1 = """
abc.def.fg.com
"""

HOSTNAME_2 = """
testsat.example.com
"""

KATELLO_DEFAULT_CA_ISSUER_OUPTUT_HIT = """
issuer= /C=US/ST=North Carolina/L=Raleigh/O=Katello/OU=SomeOrgUnit/CN=testsat.example.com
""".strip()

KATELLO_DEFAULT_CA_ISSUER_OUPTUT_NON_HIT = """
issuer= /C=US/ST=North Carolina/L=Raleigh/O=Katello/OU=SomeOrgUnit/CN=another.example.com
""".strip()


satellite_version_rb = """
COMMAND> cat /usr/share/foreman/lib/satellite/version.rb
Expand Down Expand Up @@ -164,12 +83,26 @@
scl-utils-20120927-27.el6_6.x86_64 Wed May 18 14:18:16 2016
"""

BOTH_CAPSULE_AND_FOREMAN_PKGS_INSTALLED = """
scl-utils-20120927-27.el7_6.x86_64 Wed May 18 14:18:16 2016
SDL-1.2.14-6.el7.x86_64 Wed May 18 14:16:25 2016
satellite-capsule-6.9.0.11-1.el7sat.noarch Wed May 18 14:16:25 2016
foreman-1.24.1-1.el7sat.noarch Wed May 18 14:16:25 2016
"""

BOTH_CAPSULE_AND_SATELLITE_PKGS_INSTALLED = """
scl-utils-20120927-27.el7_6.x86_64 Wed May 18 14:18:16 2016
SDL-1.2.14-6.el7.x86_64 Wed May 18 14:16:25 2016
satellite-capsule-6.9.0.11-1.el7sat.noarch Wed May 18 14:16:25 2016
satellite-6.9.0.11-1.el7sat.noarch Wed May 18 14:16:25 2016
"""


def test_get_sat5_version():
rpms = InstalledRpms(context_wrap(installed_rpms_5))
expected = ('satellite-schema-5.6.0.10-1.el6sat',
'5.6.0.10', '1.el6sat', 5, 6)
result = SatelliteVersion(rpms, None, None, None, None)
result = SatelliteVersion(rpms, None)
assert result.major == expected[-2]
assert result.minor == expected[-1]
assert result.full == expected[0]
Expand All @@ -180,7 +113,7 @@ def test_get_sat5_version():
def test_get_sat61_version():
rpms = InstalledRpms(context_wrap(installed_rpms_61))
expected = ('6.1.7', '6.1.7', None, 6, 1)
result = SatelliteVersion(rpms, None, None, None, None)
result = SatelliteVersion(rpms, None)
assert result.major == expected[-2]
assert result.minor == expected[-1]
assert result.full == expected[0]
Expand All @@ -189,7 +122,7 @@ def test_get_sat61_version():

sat = Satellite6Version(context_wrap(satellite_version_rb))
expected = ('6.1.3', '6.1.3', None, 6, 1)
result = SatelliteVersion(rpms, sat, None, None, None)
result = SatelliteVersion(rpms, sat)
assert result.major == expected[-2]
assert result.minor == expected[-1]
assert result.full == expected[0]
Expand All @@ -198,7 +131,7 @@ def test_get_sat61_version():

rpms = InstalledRpms(context_wrap(installed_rpms_6110))
expected = ('6.1.10', '6.1.10', None, 6, 1)
result = SatelliteVersion(rpms, None, None, None, None)
result = SatelliteVersion(rpms, None)
assert result.major == expected[-2]
assert result.minor == expected[-1]
assert result.full == expected[0]
Expand All @@ -207,7 +140,7 @@ def test_get_sat61_version():

rpms = InstalledRpms(context_wrap(installed_rpms_6111))
expected = ('6.1.11', '6.1.11', None, 6, 1)
result = SatelliteVersion(rpms, None, None, None, None)
result = SatelliteVersion(rpms, None)
assert result.major == expected[-2]
assert result.minor == expected[-1]
assert result.full == expected[0]
Expand All @@ -218,7 +151,7 @@ def test_get_sat61_version():
def test_get_sat60():
rpms = InstalledRpms(context_wrap(installed_rpms_60))
expected = ('6.0.8', '6.0.8', None, 6, 0)
result = SatelliteVersion(rpms, None, None, None, None)
result = SatelliteVersion(rpms, None)
assert result.major == expected[-2]
assert result.minor == expected[-1]
assert result.full == expected[0]
Expand All @@ -230,7 +163,7 @@ def test_get_sat61_version_both():
rpms = InstalledRpms(context_wrap(installed_rpms_61))
sat = Satellite6Version(context_wrap(satellite_version_rb))
expected = ('6.1.3', '6.1.3', None, 6, 1)
result = SatelliteVersion(rpms, sat, None, None, None)
result = SatelliteVersion(rpms, sat)
assert result.major == expected[-2]
assert result.minor == expected[-1]
assert result.full == expected[0]
Expand All @@ -242,7 +175,7 @@ def test_get_sat62_version():
rpms = InstalledRpms(context_wrap(installed_rpms_62))
expected = ('satellite-6.2.0.11-1.el7sat',
'6.2.0.11', '1.el7sat', 6, 2)
result = SatelliteVersion(rpms, None, None, None, None)
result = SatelliteVersion(rpms, None)
assert result.major == expected[-2]
assert result.minor == expected[-1]
assert result.full == expected[0]
Expand All @@ -265,78 +198,35 @@ def test_get_sat62_capsule_version():
def test_no_sat_installed():
rpms = InstalledRpms(context_wrap(no_sat))
with pytest.raises(SkipComponent) as sc:
SatelliteVersion(rpms, None, None, None, None)
SatelliteVersion(rpms, None)
assert "Not a Satellite machine" in str(sc)

rpms = InstalledRpms(context_wrap(no_sat))
with pytest.raises(SkipComponent) as sc:
CapsuleVersion(rpms, None)
assert "Not a Satellite Capsule machine" in str(sc)

rpms = InstalledRpms(context_wrap(installed_rpms_611x_confilct))
with pytest.raises(SkipComponent) as sc:
SatelliteVersion(rpms, None, None, None, None)
SatelliteVersion(rpms, None)
assert "unable to determine Satellite version" in str(sc)


def test_both_pkgs():
rpms = InstalledRpms(context_wrap(BOTH_SATELLITE_AND_SATELLITE_CAPSULE))
rhsm_cdn = RHSMConf(context_wrap(RHSM_CONF_CDN))
rhsm_not_cdn = RHSMConf(context_wrap(RHSM_CONF_NON_CDN))
rhsm_without_hostname = RHSMConf(context_wrap(RHSM_CONF_CDN_NO_HOSTNAME))

# satellite register to cdn
result = SatelliteVersion(rpms, None, rhsm_cdn, None, None)
assert result is not None
assert result.version == '6.8.0.11'

# not a satellite to cdn
with pytest.raises(SkipComponent):
SatelliteVersion(rpms, None, rhsm_not_cdn, None, None)

# can not identify since hostname missed
with pytest.raises(SkipComponent):
SatelliteVersion(rpms, None, rhsm_without_hostname, None, None)

# a capsule to cdn
result = CapsuleVersion(rpms, rhsm_not_cdn)
assert result is not None
assert result.version == '6.8.0.11'

# not a capsule to cdn
with pytest.raises(SkipComponent):
CapsuleVersion(rpms, rhsm_cdn)

# satellite register to itself by cdn
parser_hostname_hit = Hnf(context_wrap(HOSTNAME_1))
parser_hostname_not_hit = Hnf(context_wrap(HOSTNAME_2))
hostname_hit = Hostname(parser_hostname_hit, None, None, None)
hostname_not_hit = Hostname(parser_hostname_not_hit, None, None, None)
result = SatelliteVersion(rpms, None, rhsm_not_cdn, hostname_hit, None)
assert result is not None
assert result.version == '6.8.0.11'

# not a satellite
with pytest.raises(SkipComponent):
SatelliteVersion(rpms, None, rhsm_not_cdn, hostname_not_hit, None)
rpms = InstalledRpms(context_wrap(BOTH_CAPSULE_AND_FOREMAN_PKGS_INSTALLED))
capsule = CapsuleVersion(rpms, None)
assert capsule is not None
assert capsule.version == '6.9.0.11'

# a satellite which register to itself
ca_cert_hit = RhsmKatelloDefaultCACert(context_wrap(KATELLO_DEFAULT_CA_ISSUER_OUPTUT_HIT))
ca_cert_not_hit = RhsmKatelloDefaultCACert(context_wrap(KATELLO_DEFAULT_CA_ISSUER_OUPTUT_NON_HIT))
SatelliteVersion(rpms, None, rhsm_not_cdn, hostname_not_hit, ca_cert_hit)
assert result is not None
assert result.version == '6.8.0.11'
both_satellite_and_capsule_rpms = InstalledRpms(context_wrap(BOTH_CAPSULE_AND_SATELLITE_PKGS_INSTALLED))
satellite = SatelliteVersion(both_satellite_and_capsule_rpms, None)
assert satellite is not None
assert satellite.version == '6.9.0.11'

# not a satellite
with pytest.raises(SkipComponent):
SatelliteVersion(rpms, None, rhsm_not_cdn, hostname_not_hit, ca_cert_not_hit)
CapsuleVersion(both_satellite_and_capsule_rpms, satellite)


def test_doc_examples():
sat_rpms = InstalledRpms(context_wrap(installed_rpms_62))
cap_rpms = InstalledRpms(context_wrap(installed_rpms_62_cap))
env = {
'sat_ver': SatelliteVersion(sat_rpms, None, None, None, None),
'sat_ver': SatelliteVersion(sat_rpms, None),
'cap_ver': CapsuleVersion(cap_rpms, None),
}
failed, total = doctest.testmod(satellite_version, globs=env)
Expand Down

0 comments on commit 8fdfcd3

Please sign in to comment.