2
0
mirror of https://github.com/xcat2/xcat-core.git synced 2026-09-05 04:27:55 +00:00
Commit Graph

259 Commits

Author SHA1 Message Date
Vinícius Ferrão 7b9fef4df3 test(dhcp): preserve hosts on failed replacement 2026-08-26 22:23:02 -03:00
Vinícius Ferrão e66a014564 test(dhcp): cover fabric identity compatibility 2026-08-26 22:23:02 -03:00
Vinícius Ferrão 1be564aef7 test(dhcp): preserve adjacent static hosts 2026-08-26 22:23:01 -03:00
Vinícius Ferrão c045dd3ed3 test(dhcp): pin the InfiniBand identity of a node that boots over IPoIB
Drive the routine that makes the InfiniBand address and make sure that it
gives the port GUID of the two adapters that this was validated with, and that
it gives nothing for an address that is not a six byte ethernet mac.

Pin that the second entry waits for an ethernet node whose network an IPoIB
interface serves, that it carries hardware type 32 and the derived address,
that it does not take the place of the entry of the node, and that removing
the node removes it by name and by address.
2026-08-26 22:22:31 -03:00
Vinícius Ferrão b2ad18137b Merge pull request #7766 from VersatusHPC/refactor/routeop-helper-reuse
refactor(routeop): reuse route classification helpers
2026-08-26 11:11:44 -03:00
Daniel Hilst b4c7936cc6 Merge pull request #7764 from VersatusHPC/refactor/dhcp-shared-os-version-parsing
refactor(dhcp): reuse shared OS version parsing
2026-08-26 11:09:02 -03:00
Daniel Hilst e8b0620345 Merge pull request #7757 from VersatusHPC/refactor/template-shared-ubuntu-version-comparison
refactor(template): use shared Ubuntu version comparison
2026-08-26 11:06:31 -03:00
Vinícius Ferrão 2dc4afd903 Merge pull request #7741 from stanford-rc/genpdu
feat: add `genpdu` pdutype for generic SNMP PDUs (PDU2-MIB)
2026-08-26 00:14:25 -03:00
Kilian Cavalotti 0b4695eef2 Accept MIB labels for genpdu enumerated values
With PDU2-MIB loaded, SNMP.pm returns an enumerated INTEGER as its label
rather than its number: a PX4 answers inletSensorUnits with "amp" rather
than "2". That failed the numeric test, fell back to none(-1) and
dropped the unit suffix from every rvitals reading.

Add pdu2_enum, which accepts the number, the label, or the label(value)
form Net-SNMP produces with quick printing off, and use it for the
sensor units and for outletSwitchingState.

Also stop requiring the switching probe to read on or off. An outlet can
be in any SensorStateEnumeration state, and pdu2_get has already ruled
out an absent instance, so any answer proves the outlet is switchable.

Signed-off-by: Kilian Cavalotti <kilian@stanford.edu>
2026-08-25 17:44:23 -07:00
Daniel Hilst ab7813e3e6 Merge pull request #7746 from VersatusHPC/fix/blade-findme-chassis-filter
fix(blade): let a discovery request reach the findme handler
2026-08-25 20:26:47 -03:00
Vinícius Ferrão 763c90c116 test(discovery): cover shared findme decisions 2026-08-25 19:46:04 -03:00
Vinícius Ferrão 875f7d764d test(discovery): prepare shared findme helper loading 2026-08-25 19:33:08 -03:00
Vinícius Ferrão 6752cc9ce2 test(rspconfig): call the per-BMC helper directly 2026-08-25 18:47:11 -03:00
Vinícius Ferrão 0a8281880d test(blade): call the findme helpers directly 2026-08-25 18:47:10 -03:00
Vinícius Ferrão e10620c02f test(rspconfig): prepare direct helper loading 2026-08-25 18:40:56 -03:00
Vinícius Ferrão 07e591424f test(blade): prepare direct helper loading 2026-08-25 18:40:56 -03:00
Vinícius Ferrão 777fcfe561 test(blade): pin that a discovery request reaches the handler
Add a unit test for the entry decision of the blade preprocessor. The test
lifts the entry out of the plugin source and drives it, because the plugin
needs a management node to load in full.

The test gives the entry the request that a booting node sends, which names
no node, and shows that the entry hands it on and answers no error. It also
shows that a request for another command without a noderange is still
refused.
2026-08-25 18:40:56 -03:00
Vinícius Ferrão 8a64b224a3 test(rspconfig): cover one network value per BMC
Extract per_bmc_argument and the set of settings that take a list from
ipmi.pm, and drive the real routine, because the plugin needs daemon
dependencies that the test host does not have.

Cover a single value serving every BMC, a list read in session order, a
list too short for the BMC being configured, empty entries, and the
defensive inputs. Assert that only ip, netmask and gateway read a list,
that the caller reports a short list rather than sending it, that the
session keeps the value of its own BMC for the follow-up, and that the
thermal profile keeps its own argument.
2026-08-25 18:40:56 -03:00
Vinícius Ferrão cbf5cb3dae test(blade): pin which rows of the mp table are blades
Add a unit test for the routine that selects the blades. The test lifts the
routine out of the plugin source, because the plugin needs a management node
to load.

The test gives the routine the row shapes that the writers of the mp table
make: a management module and its blades from xCAT::PPCdb::add_systemX and
the shipped mp template, a chassis that gives its hardware type, and one row
for each hardware type that lsslp writes. It also shows that the handler
reads the chassis attribute and that it stops before the arp table when the
mp table holds no blades.
2026-08-25 18:40:56 -03:00
Vinícius Ferrão 8fadd0664e test(genesis): cover reviewed edge cases
Signed-off-by: Vinícius Ferrão <2031761+viniciusferrao@users.noreply.github.com>
2026-08-25 11:27:13 -03:00
Vinícius Ferrão 114faaae85 test(genesis): load plugin from library path
Signed-off-by: Vinícius Ferrão <2031761+viniciusferrao@users.noreply.github.com>
2026-08-25 11:26:47 -03:00
Vinícius Ferrão 9edbbc1817 test(genesis): use explicit fractional sleep
Signed-off-by: Vinícius Ferrão <2031761+viniciusferrao@users.noreply.github.com>
2026-08-25 11:26:47 -03:00
Vinícius Ferrão 200302ca03 test(genesis): cover stale initramfs selection
Signed-off-by: Vinícius Ferrão <2031761+viniciusferrao@users.noreply.github.com>
2026-08-25 11:26:47 -03:00
Vinícius Ferrão ecce32a3d6 test(genesis): cover offline repository gaps 2026-08-25 11:26:46 -03:00
Vinícius Ferrão 14c45107d0 test(genesis): cover final review gaps 2026-08-25 11:26:46 -03:00
Vinícius Ferrão f853d52b98 test(genesis): cover release review gaps 2026-08-25 11:26:45 -03:00
Vinícius Ferrão d43bda0005 test(genesis): cover final consumer gaps 2026-08-25 11:26:45 -03:00
Vinícius Ferrão 3fa8446d08 test(genesis): cover boot consumer gaps 2026-08-25 11:26:45 -03:00
Vinícius Ferrão f319f0fea3 test(genesis): mark intentional helper evaluation 2026-08-25 11:26:45 -03:00
Vinícius Ferrão 7e0c7925f9 test(genesis): cover weak dependency guard 2026-08-25 11:26:44 -03:00
Vinícius Ferrão 6ad1580aad test(genesis): exercise exact POWER activation 2026-08-25 11:26:44 -03:00
Vinícius Ferrão b391007e0e test(genesis): define shared repository activation 2026-08-25 11:26:43 -03:00
Vinícius Ferrão 2f2cabf86e test: centralize repository file reads 2026-08-24 21:50:51 -03:00
Kilian Cavalotti daef2d7bae Distinguish SNMP failures from absent objects in genpdu
A missing object is exception text under v2c/v3 and an error under v1,
and genpdu treated both the same. Add pdu2_get, returning a value and an
ok, absent or failed status. A failed signed minimum read now skips the
sensor, and rinv no longer prints "No Such Instance currently exists at
this OID" for a nameplate field the model does not populate.

Read the signed minimum per entity: the MIB indexes it that way, and it
decides which value column is read.

In the session probe, fall back to the PDU2 nameplate rather than
sysDescr, so a credential that cannot read PDU2 is rejected, return
early when the pduCount read fails at the transport level, and warn once
per PDU.

Signed-off-by: Kilian Cavalotti <kilian@stanford.edu>
2026-08-24 16:32:41 -07:00
Kilian Cavalotti 30dc723b6d Fix genpdu sensor value column and connection detection
genpdu read negative-capable sensors from the unsigned value column,
which the MIB leaves undefined for them: a PX4 answers it with 0 for
inlet reactive power and carries the reading in the signed column. Use
SensorSignedMinimum to pick the column, as the MIB specifies. The
unsigned column is still needed for active energy, whose range exceeds
Integer32 and reads 0 in the signed one.

An unreachable PDU or a wrong credential looked like a PDU without
switched outlets, since the switching probe was the first exchange with
the device. Probe pduCount first (implemented by every PDU2 agent,
verified on PX2, PX3 and PX4) and return no session when it fails, so
callers print "Couldn't connect to <pdu>". Warn when pduCount is not 1
rather than refusing: a linked primary still answers for its own
outlets.

Add unit tests for the genpdu sensor, session and inventory paths.

Signed-off-by: Kilian Cavalotti <kilian@stanford.edu>
2026-08-24 16:32:41 -07:00
Vinícius Ferrão 2e272ea512 test(routeop): cover route classification helpers
Signed-off-by: Vinícius Ferrão <2031761+viniciusferrao@users.noreply.github.com>
2026-08-24 18:54:52 -03:00
Vinícius Ferrão 89109e9878 Merge pull request #7755 from VersatusHPC/fix/ubuntu-subiquity-installnic
fix(xcat-core): capture Subiquity install failing
2026-08-24 18:47:26 -03:00
Vinícius Ferrão 0f37c0500a Merge pull request #7756 from VersatusHPC/fix/ubuntu-2604-support
fix(xcat-core): make xCAT work on Ubuntu 26.04 (resolute)
2026-08-24 18:43:34 -03:00
Daniel Hilst 4844528860 fix(xcat-core): resolve the Subiquity install NIC in xCAT's own fallback order
Treating an empty noderes.installnic as "mac" skipped noderes.primarynic: a node
that configures only primarynic was installed with a netplan matching on mac.mac
that never renamed the interface, and a primarynic holding a MAC address was
ignored. The order xCAT uses everywhere else is installnic -> primarynic ->
mac.mac, with either attribute allowed to hold an interface name or a MAC
address, and xCAT::NetworkUtils::gen_net_boot_params already implements it for
the netboot kernel parameters.

Resolve it in Perl and hand the template the answer:

- xCAT::Template::subiquity_install_netcfg() delegates the order to
  gen_net_boot_params and returns the netplan set-name (empty when the device is
  matched by MAC alone) and the address to match on, with mac.mac parsed by
  xCAT::Utils::parseMacTabEntry so |-separated, !hostname-suffixed entries
  resolve to THIS node rather than to whichever entry came first.
- #SUBIQUITYINSTALLNIC# / #SUBIQUITYINSTALLMAC# render those two values.
  installnic and primarynic are read blank-okay -- a node that sets neither is
  normal, and is exactly what "match on mac.mac" means -- while mac.mac stays a
  required lookup, as it was when the template read it directly.
- compute.subiquity.tmpl consumes the resolved values. No part of the fallback,
  and no mac.mac parsing, is left in shell: it only chooses whether to emit
  set-name, based on whether a name was resolved.

ubuntu_subiquity_installnic.t now passes: the six resolution cases, multi-entry
mac.mac, and the netplan the template's own late-command writes for a resolved
name and for none. ubuntu_subiquity_template.t asserts the template no longer
reads installnic/primarynic or parses MACs itself.

Signed-off-by: Daniel Hilst <392820+dhilst@users.noreply.github.com>
2026-08-24 18:17:08 -03:00
Daniel Hilst 1ddb361174 test(xcat-core): capture the two Ubuntu 26.04 provisioning blockers
Two independent defects stop xCAT working on Ubuntu 26.04 (resolute).

bind9 is only a Recommends on the xcat and xcatsn metapackages. xCAT manages the
cluster DNS through makedns/named, so a DNS server is essential to a management or a
service node -- but a Recommends is installed only while the system's APT
recommendation policy asks for it, so nothing guarantees named is on the node. On an
Ubuntu 26.04 management node it was not there: no /usr/sbin/named, and makedns failed
with "failed to start named".

The Ubuntu netboot genimage reduces an osimage's osvers to a debootstrap suite with a
bare s/\.\d+$//. That also strips the minor from a two-part osvers -- an initial
release with no point-release ISO -- so ubuntu26.04 becomes "26" and debootstrap dies
with "E: No such script: /usr/share/debootstrap/scripts/26". It is not 26.04-specific:
an initial-release 18.04/20.04/22.04 ISO hits it too.

Assert bind9 is a hard Depends on both metapackages, and drive genimage's real
codename derivation over a table of osvers. Both fail today.

Signed-off-by: Daniel Hilst <392820+dhilst@users.noreply.github.com>
2026-08-24 18:15:34 -03:00
Daniel Hilst f021fe74fe test(xcat-core): capture primarynic being skipped when installnic is unset
xCAT resolves the provisioning interface as installnic -> primarynic -> mac.mac,
and either attribute may hold an interface NAME or a MAC address;
xCAT::NetworkUtils::gen_net_boot_params owns that order for the netboot kernel
parameters. The Subiquity template short-circuits it: an empty installnic is
treated as "mac" straight away, so a node that configures only primarynic is
installed with a netplan that matches on mac.mac and never renames the
interface, and a primarynic holding a MAC address is ignored entirely.

Assert the full order against a resolver in xCAT::Template -- installnic as a
name, installnic as a MAC, installnic empty with primarynic as a name, empty
with primarynic as a MAC, both empty, and the literal "mac" -- plus multi-entry
mac.mac resolution, and then run the template's own netplan late-command with
the resolved values and compare the file it writes. These fail on the current
template, which carries the resolution in shell and has no resolver to call.

Signed-off-by: Daniel Hilst <392820+dhilst@users.noreply.github.com>
2026-08-24 18:14:40 -03:00
Vinícius Ferrão 804edace81 test(dhcp): cover sysconfig OS version policy 2026-08-24 16:21:19 -03:00
Vinícius Ferrão a66e3a4d04 test(dhcp): use shared version helpers in intent harness 2026-08-24 16:21:18 -03:00
Vinícius Ferrão a5b12caf93 test(xCAT-test): cover the ACPI firmware description of the riscv64 kernel
Pin the configuration symbols that let the riscv64 Genesis kernel describe
its hardware on firmware that publishes ACPI tables and no device tree, and
the EFI stub grub2 boots it through. Without them the image dies before the
console exists and the node goes silent instead of discovering.
2026-08-24 15:45:52 -03:00
Vinícius Ferrão f167de3e49 test(template): cover Ubuntu version policy 2026-08-24 15:11:57 -03:00
Daniel Hilst 1e4242174f Merge pull request #7730 from VersatusHPC/fix/enablekdump-staging
fix(enablekdump): stage the NFS dump setup under a per-node directory
2026-08-24 14:36:48 -03:00
Daniel Hilst f051902173 test(xcat-core): capture Subiquity install failing when installnic is unset
The Ubuntu diskful (Subiquity) install fails on any node that does not set
noderes.installnic. compute.subiquity.tmpl resolves #TABLE:noderes:$NODE:installnic#,
and Template.pm's tabdb raises "Unable to find requested field <installnic> from
table <noderes>" when the value is absent, aborting with "Failed to generate xnba
configurations" so the compute node never enters the installer. EL and SLES pass the
identical case because their statefull templates never reference installnic
(gen_net_boot_params defaults to the boot MAC).

Assert that the template uses the non-fatal #TABLEBLANKOKAY# token for installnic and
treats an empty installnic the same as "mac" (match by MAC, no NIC rename). These
assertions fail on the current template, capturing the defect.

Signed-off-by: Daniel Hilst <392820+dhilst@users.noreply.github.com>
2026-08-24 14:34:14 -03:00
Daniel Hilst f2f96b67fc Merge pull request #7728 from VersatusHPC/fix/xml-external-entity
fix(xcatd): block XML external entities on the legacy parser path
2026-08-24 14:23:48 -03:00
Daniel Hilst 5ca148889c Merge pull request #7749 from VersatusHPC/fix/nodestat-usefping-option
fix(nodestat): accept the fping option that the usage message gives
2026-08-24 12:42:21 -03:00
Daniel Hilst bcf6f9059a Merge pull request #7750 from VersatusHPC/fix/dbobjutils-exact-only-if-values
fix(dbobjutils): match exact only-if values
2026-08-24 12:39:34 -03:00