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

232 Commits

Author SHA1 Message Date
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
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 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
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
Daniel Hilst 14feebce2f Merge pull request #7753 from VersatusHPC/fix/genesis-lzma-via-xz
fix(mknb): compress the genesis image with xz when lzma is absent
2026-08-24 12:36:26 -03:00
Daniel Hilst ca5d1cfa86 Merge pull request #7751 from VersatusHPC/refactor/dbobjutils-remove-legacy-group-matcher
refactor(dbobjutils): remove redundant group matcher
2026-08-24 12:29:02 -03:00
Daniel Hilst 8c3aaa4471 Merge pull request #7727 from VersatusHPC/refactor/kea-shared-service-mapping
refactor(kea): reuse shared service mapping
2026-08-24 12:27:38 -03:00
Daniel Hilst a7f4c770b5 Merge pull request #7631 from VersatusHPC/refactor/ipmi-rmcp-response-identity
refactor(ipmi): centralize RMCP response identity check
2026-08-24 12:27:17 -03:00
Vinícius Ferrão eaa1e94a32 test(nodestat): pin the fping option and the usemon abbreviations
Add a unit test for the option that selects fping instead of nmap.

The test takes the specification out of the plugin source and gives it to
Getopt::Long with the settings that the daemon uses, so it drives the
specification that the plugin ships.

It shows that -f, --usefping and the older --useping each select fping, that
--use and --us still select usemon and do not select fping, that the bundles
-mf and -fm select both options, and that both places parse through the one
specification.
2026-08-23 22:38:41 -03:00
Vinícius Ferrão 73b145d7ff test(mknb): pin which program compresses the genesis image
Add a unit test for the routine that chooses the compression program. The
test lifts the routine out of the plugin source, because the plugin needs a
management node to load.

The test shows that lzma is used when it is there, that xz stands in when it
is not, and that xz is asked for the lzma container rather than its own. It
also shows that the caller takes the command from the routine, that the file
keeps its name and its suffix, and that the gzip fallback and the rename into
place both remain.
2026-08-23 22:38:41 -03:00
Vinícius Ferrão d3d0f86abf test(network): cover shared netmask behavior 2026-08-23 13:51:39 -03:00
Vinícius Ferrão 7afa152f8d test(dhcp): prepare shared network helper stubs 2026-08-23 13:49:15 -03:00
Vinícius Ferrão 1e8917ebe0 test(dbobjutils): guard only-if routing invariants 2026-08-23 13:13:16 -03:00
Vinícius Ferrão 21755f8f93 test(dbobjutils): cover exact only-if value matching 2026-08-23 11:38:55 -03:00
Vinícius Ferrão 5d39fc30d4 test(utils): cover comma-list membership 2026-08-23 11:08:59 -03:00
Daniel Hilst 7733d16f8d Merge pull request #7721 from VersatusHPC/feature/genesis-openembedded
feat(genesis): build images with OpenEmbedded
2026-08-21 20:36:20 -03:00
Vinícius Ferrão 9da2d71b90 test(genesis): cover legacy destiny retries 2026-08-21 20:11:31 -03:00
Vinícius Ferrão c6c11d70a1 test(genesis): cover the action boot gate 2026-08-21 02:13:19 -03:00
Vinícius Ferrão 4c50b4da50 test(genesis): cover disappearing devices 2026-08-21 02:12:56 -03:00
Vinícius Ferrão 53c8538e4a test(genesis): cover logging failures 2026-08-21 02:12:22 -03:00
Vinícius Ferrão a47c7f8e7c test(genesis): cover long kernel command lines 2026-08-21 02:10:23 -03:00
Vinícius Ferrão 492f9171a2 test(getinstdisk): cover the driver group against the identifier
Cover a RAID volume that reports a WWN against a direct attached disk
that reports none, in both scan orders, which the previous readback
decided by identifier. Keep the identifier rules of one group under
test as well: the disk that reports a WWN wins, the lower WWN wins
between two, and a path wins over no identifier at all.
2026-08-21 01:13:16 -03:00
Vinícius Ferrão bbd1a7e9d3 test(getinstdisk): cover the Xen disk scan
Cover a guest whose only disk is a Xen disk, which the scan has to
select rather than leave to the fallback, and a guest with two Xen
disks, where the driver group decides. Against the previous filter both
cases fail.
2026-08-21 01:13:15 -03:00
Vinícius Ferrão 7e8994e1b9 test(getinstdisk): pin the single script layout
Assert that the RHEL 10 copy is gone, that the RHEL 10 installer
includes the common script, and that the common script keeps the VROC
fallback, the Xen fallback and the guarded failure log.
2026-08-21 01:13:15 -03:00
Vinícius Ferrão 046c97ba2a test(getinstdisk): target the common script only
The RHEL 10 copy of the script is about to go away, so stop naming it
here first. The cases keep running against the common script, so the
coverage does not change.
2026-08-21 01:13:15 -03:00
Vinícius Ferrão 59219181c9 test(genesis): use Yocto extension filenames 2026-08-20 23:23:19 -03:00
Vinícius Ferrão baa68945cc test(genesis): use Yocto release filenames 2026-08-20 23:21:39 -03:00
Vinícius Ferrão cba24cc4c0 test(genesis): reject unsafe network state 2026-08-20 23:07:31 -03:00
Vinícius Ferrão cef35ba5e1 test(genesis): cover signed extension bundles 2026-08-20 23:03:53 -03:00
Vinícius Ferrão 56040cb4f0 test(genesis): cover release compliance output 2026-08-20 23:00:15 -03:00
Vinícius Ferrão 321595fb62 test(getinstdisk): cover the install disk selection order
Run the real scripts in a sandbox. A stub udevadm serves the device
properties from fixture files, and the partition list and the output
paths move into the sandbox. Every case runs against the common script
and against the copy the RHEL 10 installer includes.

Cover the direct attached disk against a RAID volume, a RAID only
server, the host adapter against a direct attached disk and against an
unknown driver, an NVMe device from the last group, and the default
fallback. Against the previous scripts the RAID cases fail, so they
discriminate.
2026-08-20 22:59:11 -03:00