From 77c5b70ad954eebc2916d6924a677f47837cf217 Mon Sep 17 00:00:00 2001 From: Jarrod Johnson Date: Mon, 26 Aug 2024 09:34:58 -0400 Subject: [PATCH 1/9] Wire up '-a -e' for nodeconfig --- confluent_client/bin/nodeconfig | 11 ++++++++--- .../confluent/plugins/hardwaremanagement/ipmi.py | 5 ++++- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/confluent_client/bin/nodeconfig b/confluent_client/bin/nodeconfig index 06d512c7..4d3d17f3 100755 --- a/confluent_client/bin/nodeconfig +++ b/confluent_client/bin/nodeconfig @@ -303,9 +303,14 @@ else: '/noderange/{0}/configuration/management_controller/extended/all'.format(noderange), session, printbmc, options, attrprefix='bmc.') if options.extra: - rcode |= client.print_attrib_path( - '/noderange/{0}/configuration/management_controller/extended/extra'.format(noderange), - session, printextbmc, options) + if options.advanced: + rcode |= client.print_attrib_path( + '/noderange/{0}/configuration/management_controller/extended/extra_advanced'.format(noderange), + session, printextbmc, options) + else: + rcode |= client.print_attrib_path( + '/noderange/{0}/configuration/management_controller/extended/extra'.format(noderange), + session, printextbmc, options) if printsys or options.exclude: if printsys == 'all': printsys = [] diff --git a/confluent_server/confluent/plugins/hardwaremanagement/ipmi.py b/confluent_server/confluent/plugins/hardwaremanagement/ipmi.py index 06a8c444..566cc478 100644 --- a/confluent_server/confluent/plugins/hardwaremanagement/ipmi.py +++ b/confluent_server/confluent/plugins/hardwaremanagement/ipmi.py @@ -660,6 +660,8 @@ class IpmiHandler(object): return self.handle_bmcconfig(True) elif self.element[1:4] == ['management_controller', 'extended', 'extra']: return self.handle_bmcconfig(True, extended=True) + elif self.element[1:4] == ['management_controller', 'extended', 'extra_advanced']: + return self.handle_bmcconfig(True, advanced=True, extended=True) elif self.element[1:3] == ['system', 'all']: return self.handle_sysconfig() elif self.element[1:3] == ['system', 'advanced']: @@ -1472,7 +1474,8 @@ class IpmiHandler(object): if 'read' == self.op: try: if extended: - bmccfg = self.ipmicmd.get_extended_bmc_configuration() + bmccfg = self.ipmicmd.get_extended_bmc_configuration( + hideadvanced=(not advanced)) else: bmccfg = self.ipmicmd.get_bmc_configuration() self.output.put(msg.ConfigSet(self.node, bmccfg)) From 4f1b6b1facd601f46972d8807fda13ddec4a2cb6 Mon Sep 17 00:00:00 2001 From: Jarrod Johnson Date: Mon, 26 Aug 2024 09:42:44 -0400 Subject: [PATCH 2/9] Add extra_advanced to core resource tree. --- confluent_server/confluent/core.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/confluent_server/confluent/core.py b/confluent_server/confluent/core.py index ce792fcb..a4e311c4 100644 --- a/confluent_server/confluent/core.py +++ b/confluent_server/confluent/core.py @@ -358,6 +358,10 @@ def _init_core(): 'pluginattrs': ['hardwaremanagement.method'], 'default': 'ipmi', }), + 'extra_advanced': PluginRoute({ + 'pluginattrs': ['hardwaremanagement.method'], + 'default': 'ipmi', + }), }, }, 'storage': { From d84a76dbc6d21d3798abfa9f7d518e59842fa0b0 Mon Sep 17 00:00:00 2001 From: Jarrod Johnson Date: Mon, 26 Aug 2024 10:01:24 -0400 Subject: [PATCH 3/9] Fix -a and -e nodeconfig --- confluent_server/confluent/plugins/hardwaremanagement/ipmi.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/confluent_server/confluent/plugins/hardwaremanagement/ipmi.py b/confluent_server/confluent/plugins/hardwaremanagement/ipmi.py index 566cc478..b53eccb1 100644 --- a/confluent_server/confluent/plugins/hardwaremanagement/ipmi.py +++ b/confluent_server/confluent/plugins/hardwaremanagement/ipmi.py @@ -659,9 +659,9 @@ class IpmiHandler(object): elif self.element[1:4] == ['management_controller', 'extended', 'advanced']: return self.handle_bmcconfig(True) elif self.element[1:4] == ['management_controller', 'extended', 'extra']: - return self.handle_bmcconfig(True, extended=True) + return self.handle_bmcconfig(advanced=False, extended=True) elif self.element[1:4] == ['management_controller', 'extended', 'extra_advanced']: - return self.handle_bmcconfig(True, advanced=True, extended=True) + return self.handle_bmcconfig(advanced=True, extended=True) elif self.element[1:3] == ['system', 'all']: return self.handle_sysconfig() elif self.element[1:3] == ['system', 'advanced']: From 7304c8e3b7169afdda2b4b606a62c9e974550d8a Mon Sep 17 00:00:00 2001 From: Jarrod Johnson Date: Mon, 26 Aug 2024 16:51:35 -0400 Subject: [PATCH 4/9] Fix LLA request for deploycfg If a client uses IPv6 LLA, the '%' location may slip in. In such a case, disable client ip matching, since fe80:: is useless for that anyway. --- confluent_server/confluent/netutil.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/confluent_server/confluent/netutil.py b/confluent_server/confluent/netutil.py index b4b1fbb5..e5384f5d 100644 --- a/confluent_server/confluent/netutil.py +++ b/confluent_server/confluent/netutil.py @@ -443,7 +443,10 @@ def get_nic_config(configmanager, node, ip=None, mac=None, ifidx=None, if serverfam: serveripn = socket.inet_pton(serverfam, serverip) if clientip is not None: - if '.' in clientip: + if '%' in clientip: + # link local, don't even bother' + clientfam = None + elif '.' in clientip: clientfam = socket.AF_INET elif ':' in clientip: clientfam = socket.AF_INET6 From 1d80e2703caab15634aea826ec52a89155e74f0f Mon Sep 17 00:00:00 2001 From: Jarrod Johnson Date: Tue, 27 Aug 2024 09:59:16 -0400 Subject: [PATCH 5/9] Add extended nodeconfig to confluent redfish --- .../plugins/hardwaremanagement/redfish.py | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/confluent_server/confluent/plugins/hardwaremanagement/redfish.py b/confluent_server/confluent/plugins/hardwaremanagement/redfish.py index 2c2857de..f89d9a09 100644 --- a/confluent_server/confluent/plugins/hardwaremanagement/redfish.py +++ b/confluent_server/confluent/plugins/hardwaremanagement/redfish.py @@ -516,6 +516,12 @@ class IpmiHandler(object): return self.handle_ntp() elif self.element[1:4] == ['management_controller', 'extended', 'all']: return self.handle_bmcconfig() + elif self.element[1:4] == ['management_controller', 'extended', 'advanced']: + return self.handle_bmcconfig(True) + elif self.element[1:4] == ['management_controller', 'extended', 'extra']: + return self.handle_bmcconfig(advanced=False, extended=True) + elif self.element[1:4] == ['management_controller', 'extended', 'extra_advanced']: + return self.handle_bmcconfig(advanced=True, extended=True) elif self.element[1:3] == ['system', 'all']: return self.handle_sysconfig() elif self.element[1:3] == ['system', 'advanced']: @@ -1312,12 +1318,15 @@ class IpmiHandler(object): if 'read' == self.op: lc = self.ipmicmd.get_location_information() - def handle_bmcconfig(self, advanced=False): + def handle_bmcconfig(self, advanced=False, extended=False): if 'read' == self.op: try: - self.output.put(msg.ConfigSet( - self.node, - self.ipmicmd.get_bmc_configuration())) + if extended: + bmccfg = self.ipmicmd.get_extended_bmc_configuration( + hideadvanced=(not advanced)) + else: + bmccfg = self.ipmicmd.get_bmc_configuration() + self.output.put(msg.ConfigSet(self.node, bmccfg)) except Exception as e: self.output.put( msg.ConfluentNodeError(self.node, str(e))) From b601cd97c7c09b6070b49193c49b8472b832f613 Mon Sep 17 00:00:00 2001 From: Jarrod Johnson Date: Tue, 27 Aug 2024 10:36:30 -0400 Subject: [PATCH 6/9] Bump pyghmi to a higher explicit version --- confluent_server/builddeb | 4 ++-- confluent_server/confluent_server.spec.tmpl | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/confluent_server/builddeb b/confluent_server/builddeb index a63d9d4f..71080110 100755 --- a/confluent_server/builddeb +++ b/confluent_server/builddeb @@ -36,9 +36,9 @@ if [ "$OPKGNAME" = "confluent-server" ]; then if grep wheezy /etc/os-release; then sed -i 's/^\(Depends:.*\)/\1, python-confluent-client, python-lxml, python-eficompressor, python-pycryptodomex, python-dateutil, python-pyopenssl, python-msgpack/' debian/control elif grep jammy /etc/os-release; then - sed -i 's/^\(Depends:.*\)/\1, confluent-client, python3-lxml, python3-eficompressor, python3-pycryptodome, python3-websocket, python3-msgpack, python3-eventlet, python3-pyparsing, python3-pyghmi, python3-paramiko, python3-pysnmp4, python3-libarchive-c, confluent-vtbufferd, python3-netifaces, python3-yaml, python3-dateutil/' debian/control + sed -i 's/^\(Depends:.*\)/\1, confluent-client, python3-lxml, python3-eficompressor, python3-pycryptodome, python3-websocket, python3-msgpack, python3-eventlet, python3-pyparsing, python3-pyghmi(>=1.5.71), python3-paramiko, python3-pysnmp4, python3-libarchive-c, confluent-vtbufferd, python3-netifaces, python3-yaml, python3-dateutil/' debian/control else - sed -i 's/^\(Depends:.*\)/\1, confluent-client, python3-lxml, python3-eficompressor, python3-pycryptodome, python3-websocket, python3-msgpack, python3-eventlet, python3-pyparsing, python3-pyghmi, python3-paramiko, python3-pysnmp4, python3-libarchive-c, confluent-vtbufferd, python3-netifaces, python3-yaml, python3-dateutil, python3-pyasyncore/' debian/control + sed -i 's/^\(Depends:.*\)/\1, confluent-client, python3-lxml, python3-eficompressor, python3-pycryptodome, python3-websocket, python3-msgpack, python3-eventlet, python3-pyparsing, python3-pyghmi(>=1.5.71), python3-paramiko, python3-pysnmp4, python3-libarchive-c, confluent-vtbufferd, python3-netifaces, python3-yaml, python3-dateutil, python3-pyasyncore/' debian/control fi if grep wheezy /etc/os-release; then echo 'confluent_client python-confluent-client' >> debian/pydist-overrides diff --git a/confluent_server/confluent_server.spec.tmpl b/confluent_server/confluent_server.spec.tmpl index 04e63b21..7f99ee11 100644 --- a/confluent_server/confluent_server.spec.tmpl +++ b/confluent_server/confluent_server.spec.tmpl @@ -14,15 +14,15 @@ Prefix: %{_prefix} BuildArch: noarch Requires: confluent_vtbufferd %if "%{dist}" == ".el7" -Requires: python-pyghmi >= 1.0.34, python-eventlet, python-greenlet, python-pycryptodomex >= 3.4.7, confluent_client == %{version}, python-pyparsing, python-paramiko, python-dnspython, python-netifaces, python2-pyasn1 >= 0.2.3, python-pysnmp >= 4.3.4, python-lxml, python-eficompressor, python-setuptools, python-dateutil, python-websocket-client python2-msgpack python-libarchive-c python-yaml python-monotonic cpio +Requires: python-pyghmi >= 1.5.71, python-eventlet, python-greenlet, python-pycryptodomex >= 3.4.7, confluent_client == %{version}, python-pyparsing, python-paramiko, python-dnspython, python-netifaces, python2-pyasn1 >= 0.2.3, python-pysnmp >= 4.3.4, python-lxml, python-eficompressor, python-setuptools, python-dateutil, python-websocket-client python2-msgpack python-libarchive-c python-yaml python-monotonic cpio %else %if "%{dist}" == ".el8" -Requires: python3-pyghmi >= 1.0.34, python3-eventlet, python3-greenlet, python3-pycryptodomex >= 3.4.7, confluent_client == %{version}, python3-pyparsing, python3-paramiko, python3-dns, python3-netifaces, python3-pyasn1 >= 0.2.3, python3-pysnmp >= 4.3.4, python3-lxml, python3-eficompressor, python3-setuptools, python3-dateutil, python3-enum34, python3-asn1crypto, python3-cffi, python3-pyOpenSSL, python3-websocket-client python3-msgpack python3-libarchive-c python3-yaml openssl iproute cpio +Requires: python3-pyghmi >= 1.5.71, python3-eventlet, python3-greenlet, python3-pycryptodomex >= 3.4.7, confluent_client == %{version}, python3-pyparsing, python3-paramiko, python3-dns, python3-netifaces, python3-pyasn1 >= 0.2.3, python3-pysnmp >= 4.3.4, python3-lxml, python3-eficompressor, python3-setuptools, python3-dateutil, python3-enum34, python3-asn1crypto, python3-cffi, python3-pyOpenSSL, python3-websocket-client python3-msgpack python3-libarchive-c python3-yaml openssl iproute cpio %else %if "%{dist}" == ".el9" -Requires: python3-pyghmi >= 1.0.34, python3-eventlet, python3-greenlet, python3-pycryptodomex >= 3.4.7, confluent_client == %{version}, python3-pyparsing, python3-paramiko, python3-dns, python3-netifaces, python3-pyasn1 >= 0.2.3, python3-pysnmp >= 4.3.4, python3-lxml, python3-eficompressor, python3-setuptools, python3-dateutil, python3-cffi, python3-pyOpenSSL, python3-websocket-client python3-msgpack python3-libarchive-c python3-yaml openssl iproute cpio +Requires: python3-pyghmi >= 1.5.74, python3-eventlet, python3-greenlet, python3-pycryptodomex >= 3.4.7, confluent_client == %{version}, python3-pyparsing, python3-paramiko, python3-dns, python3-netifaces, python3-pyasn1 >= 0.2.3, python3-pysnmp >= 4.3.4, python3-lxml, python3-eficompressor, python3-setuptools, python3-dateutil, python3-cffi, python3-pyOpenSSL, python3-websocket-client python3-msgpack python3-libarchive-c python3-yaml openssl iproute cpio %else -Requires: python3-dbm,python3-pyghmi >= 1.0.34, python3-eventlet, python3-greenlet, python3-pycryptodome >= 3.4.7, confluent_client == %{version}, python3-pyparsing, python3-paramiko, python3-dnspython, python3-netifaces, python3-pyasn1 >= 0.2.3, python3-pysnmp >= 4.3.4, python3-lxml, python3-eficompressor, python3-setuptools, python3-dateutil, python3-cffi, python3-pyOpenSSL, python3-websocket-client python3-msgpack python3-libarchive-c python3-PyYAML openssl iproute +Requires: python3-dbm,python3-pyghmi >= 1.5.71, python3-eventlet, python3-greenlet, python3-pycryptodome >= 3.4.7, confluent_client == %{version}, python3-pyparsing, python3-paramiko, python3-dnspython, python3-netifaces, python3-pyasn1 >= 0.2.3, python3-pysnmp >= 4.3.4, python3-lxml, python3-eficompressor, python3-setuptools, python3-dateutil, python3-cffi, python3-pyOpenSSL, python3-websocket-client python3-msgpack python3-libarchive-c python3-PyYAML openssl iproute %endif %endif %endif From 08a3a0ee766ac5f1a85cf1365ac0ecb76f72c6ad Mon Sep 17 00:00:00 2001 From: Jarrod Johnson Date: Tue, 27 Aug 2024 10:43:47 -0400 Subject: [PATCH 7/9] Correct wrong pyghmi version in dependencies --- confluent_server/confluent_server.spec.tmpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/confluent_server/confluent_server.spec.tmpl b/confluent_server/confluent_server.spec.tmpl index 7f99ee11..acaf9fc4 100644 --- a/confluent_server/confluent_server.spec.tmpl +++ b/confluent_server/confluent_server.spec.tmpl @@ -20,7 +20,7 @@ Requires: python-pyghmi >= 1.5.71, python-eventlet, python-greenlet, python-pycr Requires: python3-pyghmi >= 1.5.71, python3-eventlet, python3-greenlet, python3-pycryptodomex >= 3.4.7, confluent_client == %{version}, python3-pyparsing, python3-paramiko, python3-dns, python3-netifaces, python3-pyasn1 >= 0.2.3, python3-pysnmp >= 4.3.4, python3-lxml, python3-eficompressor, python3-setuptools, python3-dateutil, python3-enum34, python3-asn1crypto, python3-cffi, python3-pyOpenSSL, python3-websocket-client python3-msgpack python3-libarchive-c python3-yaml openssl iproute cpio %else %if "%{dist}" == ".el9" -Requires: python3-pyghmi >= 1.5.74, python3-eventlet, python3-greenlet, python3-pycryptodomex >= 3.4.7, confluent_client == %{version}, python3-pyparsing, python3-paramiko, python3-dns, python3-netifaces, python3-pyasn1 >= 0.2.3, python3-pysnmp >= 4.3.4, python3-lxml, python3-eficompressor, python3-setuptools, python3-dateutil, python3-cffi, python3-pyOpenSSL, python3-websocket-client python3-msgpack python3-libarchive-c python3-yaml openssl iproute cpio +Requires: python3-pyghmi >= 1.5.71, python3-eventlet, python3-greenlet, python3-pycryptodomex >= 3.4.7, confluent_client == %{version}, python3-pyparsing, python3-paramiko, python3-dns, python3-netifaces, python3-pyasn1 >= 0.2.3, python3-pysnmp >= 4.3.4, python3-lxml, python3-eficompressor, python3-setuptools, python3-dateutil, python3-cffi, python3-pyOpenSSL, python3-websocket-client python3-msgpack python3-libarchive-c python3-yaml openssl iproute cpio %else Requires: python3-dbm,python3-pyghmi >= 1.5.71, python3-eventlet, python3-greenlet, python3-pycryptodome >= 3.4.7, confluent_client == %{version}, python3-pyparsing, python3-paramiko, python3-dnspython, python3-netifaces, python3-pyasn1 >= 0.2.3, python3-pysnmp >= 4.3.4, python3-lxml, python3-eficompressor, python3-setuptools, python3-dateutil, python3-cffi, python3-pyOpenSSL, python3-websocket-client python3-msgpack python3-libarchive-c python3-PyYAML openssl iproute %endif From 4dc54b92d5a45a9fd8f988b90939854f1751596a Mon Sep 17 00:00:00 2001 From: Jarrod Johnson Date: Tue, 27 Aug 2024 11:35:39 -0400 Subject: [PATCH 8/9] Correct nodeconsole syntaxwarning --- confluent_client/bin/nodeconsole | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/confluent_client/bin/nodeconsole b/confluent_client/bin/nodeconsole index 076913be..f05d5783 100755 --- a/confluent_client/bin/nodeconsole +++ b/confluent_client/bin/nodeconsole @@ -243,7 +243,7 @@ if options.windowed: elif 'Height' in line: window_height = int(line.split(':')[1]) elif '-geometry' in line: - l = re.split(' |x|-|\+', line) + l = re.split(' |x|-|\\+', line) l_nosp = [ele for ele in l if ele.strip()] wmxo = int(l_nosp[1]) wmyo = int(l_nosp[2]) From cd91ed0b94b59e6b991dd482bc308cd4f4c22394 Mon Sep 17 00:00:00 2001 From: Jarrod Johnson Date: Tue, 27 Aug 2024 15:55:54 -0400 Subject: [PATCH 9/9] Fix escape warning on newer python --- confluent_client/bin/confluent2hosts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/confluent_client/bin/confluent2hosts b/confluent_client/bin/confluent2hosts index bbf989b1..b467e5cc 100644 --- a/confluent_client/bin/confluent2hosts +++ b/confluent_client/bin/confluent2hosts @@ -157,7 +157,7 @@ def main(): elif attrib.endswith('.ipv6_address') and val: ip6bynode[node][currnet] = val.split('/', 1)[0] elif attrib.endswith('.hostname'): - namesbynode[node][currnet] = re.split('\s+|,', val) + namesbynode[node][currnet] = re.split(r'\s+|,', val) for node in ip4bynode: mydomain = domainsbynode.get(node, None) for ipdb in (ip4bynode, ip6bynode):