Merged update from upstream sources

This is an automated DistroBaker update from upstream sources.
If you do not know what this is about or would like to opt out,
contact the OSCI team.

Source: https://src.fedoraproject.org/rpms/redfish-finder.git#d9d1d7fcc0526f4733acc13be875d942e3620988
This commit is contained in:
DistroBaker 2021-03-24 19:04:40 +00:00
parent cf71e92993
commit 66b42a9f48
9 changed files with 47 additions and 402 deletions

2
.gitignore vendored
View File

@ -1,2 +1,4 @@
/redfish-finder-0.1.tar.gz
/redfish-finder-0.2.tar.gz
/redfish-finder-0.3.tar.gz
/redfish-finder-0.4.tar.gz

3
README.md Normal file
View File

@ -0,0 +1,3 @@
# redfish-finder
The redfish-finder package

View File

@ -1,6 +0,0 @@
--- !Policy
product_versions:
- rhel-8
decision_context: osci_compose_gate
rules:
- !PassingTestCaseRule {test_case_name: kernel-qe.kernel-ci.hardware-redfish-finder.tier0.functional}

View File

@ -1,28 +0,0 @@
commit 581327fd45351dd53c06a26517bb7f92e19d8f31
Author: Charles Rose <charles.rose@dell.com>
Date: Mon Aug 31 17:40:08 2020 -0500
fix parsing HostConfig for DHCP
assigntype.append(AssignType.DHCP) fails for DHCP because
assigntype [] is not set.
Signed-off-by: Charles Rose <charles.rose@dell.com>
diff --git a/redfish-finder b/redfish-finder
old mode 100644
new mode 100755
index 9a185b3..461eff9
--- a/redfish-finder
+++ b/redfish-finder
@@ -124,8 +124,8 @@ class HostConfig():
if cursor == None:
printf("redfish-finder: Unable to parse SMBIOS Host IP Assignment Type")
return None
+ self.assigntype = []
if cursor.split()[0] == "Static":
- self.assigntype = []
self.assigntype.append(AssignType.STATIC)
cursor = cursor_consume_next(cursor, "Host IP Address Format: ")
if cursor.split()[0] == "IPv4":

View File

@ -1,70 +0,0 @@
commit 74c305647c892b9035332aaf179d11544104caba
Author: Adrian Huang <ahuang12@lenovo.com>
Date: Thu Jul 11 15:50:40 2019 +0800
Fix the exception if hostname is empty
Redfish Host Interface Specification [1] defines the field "Redfish
Service Hostname" as "Varies", which means it can be empty. Moreover,
this field is not mandatory for well-defined configuration (a valid
string).
The original design assumes that this field is the non-empty string
shown as follows:
-------------------------------------------------------------------
self.hostname = cursor.split()[0]
-------------------------------------------------------------------
This leads to the exception, and the "self.hostname" is not configured.
Here is the error output:
-------------------------------------------------------------------
redfish-finder: Getting dmidecode info
redfish-finder: Unexpected error parsing ServiceConfig
redfish-finder: Building NetworkManager connection info
redfish-finder: Obtaining OS config info
redfish-finder: Converting SMBIOS Host Config to NetworkManager Connection info
redfish-finder: Applying NetworkManager connection configuration changes
Error: 'enp6s0f3u2u3c2' is not an active connection.
Error: no active connection provided.
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/5)
redfish-finder: Adding redfish host info to OS config
Traceback (most recent call last):
File "./redfish-finder", line 526, in <module>
main()
File "./redfish-finder", line 520, in main
svc.update_redfish_info()
File "./redfish-finder", line 349, in update_redfish_info
if h.find(self.sconf.hostname) != -1:
AttributeError: ServiceConfig instance has no attribute 'hostname'
-------------------------------------------------------------------
This patch fixes the above-mentioned issue accordingly.
[1] https://www.dmtf.org/sites/default/files/standards/documents/DSP0270_1.1.0.pdf
Signed-off-by: Adrian Huang <ahuang12@lenovo.com>
diff --git a/redfish-finder b/redfish-finder
index 429cc42..c2cba75 100755
--- a/redfish-finder
+++ b/redfish-finder
@@ -235,7 +235,16 @@ class ServiceConfig():
cursor = cursor_consume_next(cursor, "Redfish Service Vlan: ")
self.vlan = int(cursor.split()[0])
cursor = cursor_consume_next(cursor, "Redfish Service Hostname: ")
- self.hostname = cursor.split()[0]
+
+ #
+ # Sanity check: If it contains the consecutive spaces
+ # only, reference to the index '0' will throw an
+ # exception.
+ #
+ if len(cursor.split()) != 0:
+ self.hostname = cursor.split()[0]
+ else:
+ self.hostname = ""
except:
print("redfish-finder: Unexpected error parsing ServiceConfig")

View File

@ -1,283 +0,0 @@
commit 44853a940a2b3c52395e26a3632e10cc6b5f2e5d
Author: Neil Horman <nhorman@tuxdriver.com>
Date: Thu Jun 27 11:26:48 2019 -0400
Add support for multiple type 42 blocks in SMBIOS
DMTF recently updated their host API specification to allow for multiple
type 42 blocks (in support of ipv4/ipv6 in the constrained space of a
single block). Enhance redfish-finder to parse and merge those blocks
Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
diff --git a/redfish-finder b/redfish-finder
index 45c4ea8..429cc42 100755
--- a/redfish-finder
+++ b/redfish-finder
@@ -1,4 +1,4 @@
-#!/usr/bin/python3
+#!/usr/libexec/platform-python
import sys
import os
@@ -49,6 +49,9 @@ class NetDevice(object):
def getifcname(self):
return self.name
+ def merge(self, newdev):
+ return self
+
def __str__(self):
return "Interface: " + self.name
@@ -112,9 +115,9 @@ class USBNetDevice(NetDevice):
######################################################
class HostConfig():
def __init__(self, cursor):
- self.address = None
- self.mask = None
- self.network = None
+ self.address = []
+ self.mask = []
+ self.network = []
try:
cursor = cursor_consume_next(cursor, "Host IP Assignment Type: ")
@@ -122,26 +125,30 @@ class HostConfig():
printf("redfish-finder: Unable to parse SMBIOS Host IP Assignment Type")
return None
if cursor.split()[0] == "Static":
- self.assigntype = AssignType.STATIC
+ self.assigntype = []
+ self.assigntype.append(AssignType.STATIC)
cursor = cursor_consume_next(cursor, "Host IP Address Format: ")
if cursor.split()[0] == "IPv4":
cursor = cursor_consume_next(cursor, "IPv4 Address: ")
addr = cursor.split()[0]
- self.address = ipaddress.IPv4Address(addr)
+ self.address.append(ipaddress.IPv4Address(addr))
cursor = cursor_consume_next(cursor, "IPv4 Mask: ")
mask = cursor.split()[0]
- self.mask = ipaddress.IPv4Address(mask)
- self.network = ipaddress.IPv4Network(addr + "/" + mask, strict=False)
+ self.mask.append(ipaddress.IPv4Address(mask))
+ self.network.append(ipaddress.IPv4Network(addr + "/" + mask, strict=False))
elif cursor.split()[0] == "IPv6":
cursor = cursor_consume_next(cursor, "IPv6 Address: ")
addr = cursor.split()[0]
- self.address = ipaddress.IPv6Address(addr)
+ self.address.append(ipaddress.IPv6Address(addr))
cursor = cursor_consume_next(cursor, "IPv6 Mask: ")
mask = cursor.split()[0]
- self.mask = ipaddress.IPv4Address(mask)
- self.network = ipaddress.IPv6Network(addr + "/" + mask, strict=False)
+ self.mask.append(ipaddress.IPv4Address(mask))
+ self.network.append(ipaddress.IPv6Network(addr + "/" + mask, strict=False))
elif cursor.split()[0] == "DHCP":
- self.assigntype = AssignType.DHCP
+ self.assigntype.append(AssignType.DHCP)
+ self.address.append(0)
+ self.mask.append(0)
+ self.network.append(0)
else:
# Support the other types later
print("redfish-finder: Unable to parse SMBIOS Host configuaration")
@@ -150,6 +157,13 @@ class HostConfig():
print("redfish-finder: Unexpected error while parsing HostConfig!")
return None
+ def merge(self, newconfig):
+ self.assigntype.extend(newconfig.assigntype)
+ self.address.extend(newconfig.address)
+ self.mask.extend(newconfig.mask)
+ self.network.extend(newconfig.network)
+ return self
+
#
# Using the smbios host config info, set the appropriate
# attributes of the network manager connection object
@@ -157,20 +171,22 @@ class HostConfig():
def generate_nm_config(self, device, nmcon):
assignmap = { AssignType.STATIC: "manual", AssignType.DHCP: "auto"}
methodp = "ipv4.method"
- if self.assigntype == AssignType.STATIC:
- if self.address.version == 4:
- methodp = "ipv4.method"
- addrp = "ipv4.addresses"
- else:
- methodp = "ipv6.method"
- addrp = "ipv6.addresses"
- try:
- nmcon.update_property(methodp, assignmap[self.assigntype])
- if self.assigntype == AssignType.STATIC:
- nmcon.update_property(addrp, str(self.address) + "/" + str(self.network.prefixlen))
- except:
- print("redfish-finder: Error generating nm_config")
- return False
+ for i in range(len(self.assigntype)):
+ assigntype = self.assigntype[i]
+ if assigntype == AssignType.STATIC:
+ if self.address[i].version == 4:
+ methodp = "ipv4.method"
+ addrp = "ipv4.addresses"
+ else:
+ methodp = "ipv6.method"
+ addrp = "ipv6.addresses"
+ try:
+ nmcon.update_property(methodp, assignmap[assigntype])
+ if assigntype == AssignType.STATIC:
+ nmcon.update_property(addrp, str(self.address[i]) + "/" + str(self.network[i].prefixlen))
+ except:
+ print("redfish-finder: Error generating nm_config")
+ return False
return True
@@ -188,8 +204,8 @@ class HostConfig():
######################################################
class ServiceConfig():
def __init__(self, cursor):
- self.address = None
- self.mask = None
+ self.address = []
+ self.mask = []
try:
cursor = cursor_consume_next(cursor, "Redfish Service IP Discovery Type: ")
if cursor == None:
@@ -200,14 +216,14 @@ class ServiceConfig():
cursor = cursor_consume_next(cursor, "Redfish Service IP Address Format: ")
if cursor.split()[0] == "IPv4":
cursor = cursor_consume_next(cursor, "IPv4 Redfish Service Address: ")
- self.address = ipaddress.IPv4Address(cursor.split()[0])
+ self.address.append(ipaddress.IPv4Address(cursor.split()[0]))
cursor = cursor_consume_next(cursor, "IPv4 Redfish Service Mask: ")
- self.mask = ipaddress.IPv4Address(cursor.split()[0])
+ self.mask.append(ipaddress.IPv4Address(cursor.split()[0]))
elif cursor.split()[0] == "IPv6":
cursor = cursor_consume_next(cursor, "IPv6 Redfish Service Address: ")
- self.address = ipaddress.IPv6Address(unicode(cursor.split()[0], "utf-8"))
+ self.address.append(ipaddress.IPv6Address(unicode(cursor.split()[0], "utf-8")))
cursor = cursor_consume_next(cursor, "IPv6 Mask: ")
- self.mask = ipaddress.IPv4Address(unicode(cursor.split()[0], "utf-8"))
+ self.mask.append(ipaddress.IPv4Address(unicode(cursor.split()[0], "utf-8")))
elif cursor.split()[0] == "DHCP":
self.assigntype = AssignType.DHCP
else:
@@ -223,6 +239,11 @@ class ServiceConfig():
except:
print("redfish-finder: Unexpected error parsing ServiceConfig")
+ def merge(self, newconfig):
+ self.address.extend(newconfig.address)
+ self.mask.extend(newconfig.mask)
+ return self
+
def __str__(self):
val = "Service Config(" + AssignType.typestring[self.assigntype] + ")"
if (self.assigntype == AssignType.STATIC):
@@ -236,42 +257,63 @@ class ServiceConfig():
######################################################
class dmiobject():
def __init__(self, dmioutput):
+ self.device = None
+ self.hostconfig = None
+ self.serviceconfig = None
cursor = dmioutput
# Find the type 42 header, if not found, nothing to do here
- cursor = cursor_consume_next(cursor, "Management Controller Host Interface\n")
- if (cursor == None):
- return None
- cursor = cursor_consume_next(cursor, "Host Interface Type: Network\n")
- if (cursor == None):
- return None
+ cursor = cursor_consume_next(cursor, "Management Controller Host Interface\n")
+ while (cursor != None):
+ if (cursor == None):
+ return None
+ cursor = cursor_consume_next(cursor, "Host Interface Type: Network\n")
+ if (cursor == None):
+ return None
- # If we get here then we know this is a network interface device
- cursor = cursor_consume_next(cursor, "Device Type: ")
- # The next token should either be:
- # USB
- # PCI/PCIe
- # OEM
- # Unknown
- dtype = cursor.split()[0]
- if (dtype == "USB"):
- self.device = USBNetDevice(cursor)
-
- if self.device == None:
- return None
+ # If we get here then we know this is a network interface device
+ cursor = cursor_consume_next(cursor, "Device Type: ")
+ # The next token should either be:
+ # USB
+ # PCI/PCIe
+ # OEM
+ # Unknown
+ dtype = cursor.split()[0]
+ if (dtype == "USB"):
+ newdev = USBNetDevice(cursor)
+
+ if newdev == None:
+ return None
- # Now find the Redfish over IP section
- cursor = cursor_consume_next(cursor, "Protocol ID: 04 (Redfish over IP)\n")
- if (cursor == None):
- print("redfish-finder: Unable to find Redfish Protocol")
- return None
+ if self.device == None:
+ self.device = newdev
+ else:
+ self.device.merge(newdev)
- self.hostconfig = HostConfig(cursor)
- if self.hostconfig == None:
- return None
+ # Now find the Redfish over IP section
+ cursor = cursor_consume_next(cursor, "Protocol ID: 04 (Redfish over IP)\n")
+ if (cursor == None):
+ print("redfish-finder: Unable to find Redfish Protocol")
+ return None
- self.serviceconfig = ServiceConfig(cursor)
- if self.serviceconfig == None:
- return None
+ newhostconfig = HostConfig(cursor)
+ if newhostconfig == None:
+ return None
+
+ if self.hostconfig == None:
+ self.hostconfig = newhostconfig
+ else:
+ self.hostconfig.merge(newhostconfig)
+
+ serviceconfig = ServiceConfig(cursor)
+ if serviceconfig == None:
+ return None
+
+ if self.serviceconfig == None:
+ self.serviceconfig = serviceconfig
+ elif self.serviceconfig == None:
+ self.serviceconfig.merge(serviceconfig)
+
+ cursor = cursor_consume_next(cursor, "Management Controller Host Interface\n")
def __str__(self):
@@ -309,7 +351,10 @@ class OSServiceData():
continue
# Now add the new entries in
- newentry = str(self.sconf.address) + " " + self.constant_name
+ addresses=""
+ for i in self.sconf.address:
+ addresses = addresses + str(i) + " "
+ newentry = addresses + " " + self.constant_name
newentry = newentry + " " + self.sconf.hostname
self.host_entries.append(newentry)

View File

@ -0,0 +1,20 @@
commit 59fc5f964bf6971da552d059520d7798fccbd4fc
Author: Neil Horman <nhorman@hmswarspite.think-freely.org>
Date: Tue Nov 12 08:53:50 2019 -0500
fixup interpreter to be python3
This should never have been there, platform-python is an old distro-ism.
Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
diff --git a/redfish-finder b/redfish-finder
index 6637d92..9a185b3 100644
--- a/redfish-finder
+++ b/redfish-finder
@@ -1,4 +1,4 @@
-#!/usr/libexec/platform-python
+#!/usr/bin/python3
import sys
import os

View File

@ -1,5 +1,5 @@
Name: redfish-finder
Version: 0.3
Version: 0.4
Release: 5%{?dist}
Summary: Utility for parsing SMBIOS information and configuring canonical BMC access
BuildArch: noarch
@ -8,9 +8,7 @@ License: GPLv2
URL: https://github.com/nhorman/redfish-finder
Source0: %url/archive/V%{version}/%{name}-%{version}.tar.gz
Patch0: redfish-finder-multi-block.patch
Patch1: hostname-null-check.patch
Patch2: hostconfig-dhcp-parse.patch
Patch0: redfish-finder-python3.patch
%{?systemd_requires}
BuildRequires: systemd
@ -52,20 +50,29 @@ install -D -p -m 0644 ./redfish-finder.service %{buildroot}/%{_unitdir}/redfish-
%{_unitdir}/redfish-finder.service
%changelog
* Fri Feb 12 2021 Joel Savitz <jsavitz@redhat.com - 0.3-5
- Fix parsing HostConfig for DHCP (bz1874653)
* Wed Jan 27 2021 Fedora Release Engineering <releng@fedoraproject.org> - 0.4-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
* Thu Oct 17 2019 Neil Horman <nhorman@redhat.com> - 0.3-4
- Fix null hostname check (bz1729343)
* Wed Jul 29 2020 Fedora Release Engineering <releng@fedoraproject.org> - 0.4-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Mon Jul 01 2019 Neil Horman <nhorman@redhat.com> - 0.3-3
- Enhance to support multiple type 42 blocks (bz1715914)
* Thu Jan 30 2020 Fedora Release Engineering <releng@fedoraproject.org> - 0.4-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
* Fri Apr 26 2019 Neil Horman <nhorman@redhat.com> - 0.3-2
- Bump release number to test CI gating
* Tue Nov 12 2019 Neil Horman <nhorman@redhat.com> - 0.4-2
-Fixup interpreter (bz 1770861)
* Mon Apr 01 2019 Neil Horman <nhorman@redhat.com> - 0.3-1
- Update to latest upstream release (bz1687111)
* Thu Oct 17 2019 Neil Horman <nhorman@redhat.com> - 0.4-1
- Update to latest upstream (bz1730589)
* Fri Jul 26 2019 Fedora Release Engineering <releng@fedoraproject.org> - 0.3-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
* Wed Mar 06 2019 Neil Horman <nhorman@redhat.com> - 0.3-1
- Update to latest upstream release
* Sat Feb 02 2019 Fedora Release Engineering <releng@fedoraproject.org> - 0.2-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
* Fri Oct 19 2018 Neil Horman <nhorman@redhat.com> - 0.2-1
- Update to new upstream release

View File

@ -1 +1 @@
f27cfb52c83090a82c7999c2ffd90794 redfish-finder-0.3.tar.gz
SHA512 (redfish-finder-0.4.tar.gz) = 5a38e2f2888cd9cdedd877a09ffd954dd7631f546c4e58fbcb523835b4c0905dd6d4288e6fca2e545740467e177b38895646f746a49f070b9f450a5390a0429d