diff --git a/.gitignore b/.gitignore index 0c37c3b..4886041 100644 --- a/.gitignore +++ b/.gitignore @@ -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 diff --git a/README.md b/README.md new file mode 100644 index 0000000..89b40f4 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# redfish-finder + +The redfish-finder package \ No newline at end of file diff --git a/gating.yaml b/gating.yaml deleted file mode 100644 index 8b152f6..0000000 --- a/gating.yaml +++ /dev/null @@ -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} diff --git a/hostconfig-dhcp-parse.patch b/hostconfig-dhcp-parse.patch deleted file mode 100644 index 8d9a412..0000000 --- a/hostconfig-dhcp-parse.patch +++ /dev/null @@ -1,28 +0,0 @@ -commit 581327fd45351dd53c06a26517bb7f92e19d8f31 -Author: Charles Rose -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 - -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": - diff --git a/hostname-null-check.patch b/hostname-null-check.patch deleted file mode 100644 index 9320f38..0000000 --- a/hostname-null-check.patch +++ /dev/null @@ -1,70 +0,0 @@ -commit 74c305647c892b9035332aaf179d11544104caba -Author: Adrian Huang -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 - 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 - -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") - diff --git a/redfish-finder-multi-block.patch b/redfish-finder-multi-block.patch deleted file mode 100644 index 41ab1a2..0000000 --- a/redfish-finder-multi-block.patch +++ /dev/null @@ -1,283 +0,0 @@ -commit 44853a940a2b3c52395e26a3632e10cc6b5f2e5d -Author: Neil Horman -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 - -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) - diff --git a/redfish-finder-python3.patch b/redfish-finder-python3.patch new file mode 100644 index 0000000..85ee85c --- /dev/null +++ b/redfish-finder-python3.patch @@ -0,0 +1,20 @@ +commit 59fc5f964bf6971da552d059520d7798fccbd4fc +Author: Neil Horman +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 + +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 diff --git a/redfish-finder.spec b/redfish-finder.spec index 83f3b40..7cf0738 100644 --- a/redfish-finder.spec +++ b/redfish-finder.spec @@ -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 - 0.4-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild -* Thu Oct 17 2019 Neil Horman - 0.3-4 -- Fix null hostname check (bz1729343) +* Wed Jul 29 2020 Fedora Release Engineering - 0.4-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild -* Mon Jul 01 2019 Neil Horman - 0.3-3 -- Enhance to support multiple type 42 blocks (bz1715914) +* Thu Jan 30 2020 Fedora Release Engineering - 0.4-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild -* Fri Apr 26 2019 Neil Horman - 0.3-2 -- Bump release number to test CI gating +* Tue Nov 12 2019 Neil Horman - 0.4-2 +-Fixup interpreter (bz 1770861) -* Mon Apr 01 2019 Neil Horman - 0.3-1 -- Update to latest upstream release (bz1687111) +* Thu Oct 17 2019 Neil Horman - 0.4-1 +- Update to latest upstream (bz1730589) + +* Fri Jul 26 2019 Fedora Release Engineering - 0.3-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Wed Mar 06 2019 Neil Horman - 0.3-1 +- Update to latest upstream release + +* Sat Feb 02 2019 Fedora Release Engineering - 0.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild * Fri Oct 19 2018 Neil Horman - 0.2-1 - Update to new upstream release diff --git a/sources b/sources index f64110c..35c2ade 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -f27cfb52c83090a82c7999c2ffd90794 redfish-finder-0.3.tar.gz +SHA512 (redfish-finder-0.4.tar.gz) = 5a38e2f2888cd9cdedd877a09ffd954dd7631f546c4e58fbcb523835b4c0905dd6d4288e6fca2e545740467e177b38895646f746a49f070b9f450a5390a0429d