2
0
mirror of https://github.com/xcat2/xcat-core.git synced 2026-10-21 07:08:12 +00:00
Commit Graph

28957 Commits

Author SHA1 Message Date
Daniel Hilst 9b2c5569fd Merge pull request #7941 from VersatusHPC/refactor/r26-credential-reuse
refactor(postscripts): share credential reply filtering and decoding
2026-10-16 21:25:48 -03:00
Daniel Hilst 43dee182ef Merge pull request #7909 from VersatusHPC/feat/secureboot-ipxe
fix(ipxe): a node with Secure Boot on cannot load the kernel
2026-10-16 20:44:36 -03:00
Vinícius Ferrão 97fce5a590 docs(test): list credential fixture prerequisites 2026-10-16 20:21:57 -03:00
Vinícius Ferrão b315ceaee0 test(postscripts): exercise credential replies and retries
Run the complete postscripts with controlled credential replies and native
SSH key generation. Check successful and empty replies, server errors,
retry limits, flow-control differences and password logging.
2026-10-16 20:21:42 -03:00
Vinícius Ferrão 4a525a77f4 refactor(postscripts): share credential reply filtering and decoding
Move the common credential response filters into xcatlib.sh. Keep the
requests, key retry filters and caller-specific retry, flow-control and
listener handling in place.
2026-10-16 20:21:18 -03:00
Daniel Hilst 558bf24138 Merge pull request #7923 from VersatusHPC/test/r26-profile-rendering
test(provisioning): exercise rendered profiles and installer commands
2026-10-16 20:19:26 -03:00
Daniel Hilst 1bde265fc4 Merge pull request #7924 from VersatusHPC/test/r26-isolated-scripts
test(provisioning): isolate disk, kdump and sudoer checks
2026-10-16 20:16:49 -03:00
Daniel Hilst 2e3ba914cd Merge pull request #7948 from VersatusHPC/fix/imgimport-checks
fix(imgport): check an imgimport before it writes anything
2026-10-16 20:05:38 -03:00
Daniel Hilst 7f2d271eb0 Merge pull request #7953 from VersatusHPC/fix/genimage-run-mountpoint
fix(genimage): create the /run mount point before mounting it
2026-10-16 20:00:57 -03:00
Daniel Hilst 2fb100009d Merge pull request #7952 from VersatusHPC/test/r26-networkmanager-file-io
test(network): reuse binary I/O for NetworkManager fixtures
2026-10-16 19:15:49 -03:00
Vinícius Ferrão c30447e94f docs(test): describe the disk selection test boundary 2026-10-16 19:07:03 -03:00
Vinícius Ferrão 28b22d7825 test(provisioning): exercise disk selection with BATS
Source the unchanged selector with explicit partition and udev fixtures.
Bound awk discovery to the fixture so runner filesystem size cannot delay
selection. Keep rendered-installer coverage and independent CI failures.
2026-10-16 19:06:47 -03:00
Vinícius Ferrão ab034a6d58 test(provisioning): avoid aborting the isolated script suite 2026-10-16 19:06:47 -03:00
Vinícius Ferrão 5426b3fba0 docs(test): describe isolated script prerequisites 2026-10-16 19:06:46 -03:00
Vinícius Ferrão 7557d00481 test(sudoer): isolate account and privilege configuration 2026-10-16 19:06:26 -03:00
Vinícius Ferrão 599cd3f32f test(kdump): execute per-node configuration in isolation 2026-10-16 19:06:26 -03:00
Vinícius Ferrão 509a60def2 test(provisioning): isolate install disk selection checks 2026-10-16 19:06:25 -03:00
Vinícius Ferrão 0b70a389a3 test(genimage): check the chroot mounts of a new RPM image
The image caller tests create the run directory in their fixture
image, so they did not see a bind mount to a missing mount point.

Run rh/genimage on a new and on an existing image directory. The mount
fixture fails like mount(8) when the mount point is missing, and the
package manager fixture records the mounts in place when the packages
install. Cover EL9 through the rh and rocky entry points, and EL6,
which does not mount /proc and /sys. The pull-request workflow runs
the test.
2026-10-16 18:45:27 -03:00
Vinícius Ferrão 042804fe5e fix(genimage): create the /run mount point before mounting it
mount_chroot bind-mounts the host /run into the image root before the
run directory exists there. On the first build of a new image, mount
fails with "mount point does not exist". genimage does not check the
result, so the packages install without the host /run.

Create the directory first, as mount_chroot already does for /proc,
/sys and /dev. The mount also uses the subroutine argument instead of
the global image path. Both have the same value at every call site.
2026-10-16 18:45:07 -03:00
Vinícius Ferrão 7c930bee9d test(imgport): cover the image lock of a statelite import
A statelite import must ask for the lock of its image directory. While
another command holds the lock, the import must fail, report the lock,
leave the tree in the bundle, and keep the image definition.
2026-10-16 18:38:06 -03:00
Vinícius Ferrão 9ecde2b838 fix(imgport): take the image lock for a statelite import
imgimport took the image lock only when the bundle had a rootimg. A
statelite bundle has a rootimgtree instead, so its import extracted the
tree while genimage, packimage, liteimg or rmimage could change the same
image. imgimport now locks the directory of the first of the rootimg,
rootimgtree, kernel and ramdisk that the bundle has.
2026-10-16 18:38:00 -03:00
Vinícius Ferrão 0437ddd44d test(imgport): cover the image definition after a failed import
Check that the image definition stays when another host holds the
publication lock, or when the file system refuses the publication.
Check the same when a table of the definition opens only with
autocommit. Check that the definition matches the published image when
an extra file fails to copy after the publication.
2026-10-16 18:37:59 -03:00
Vinícius Ferrão c6ff6f6b77 fix(imgport): place the boot files of an image before its definition
imgimport wrote the image definition before it published the root
image. When the publication failed, as when another host held the
publication lock, the import failed with the new definition and the
previous files.

imgimport now places the root image, kernel and ramdisk first, then
writes the image definition, then places the other files. A later
failure leaves the definition that matches the published boot files,
as before. Before it writes anything, imgimport also opens the tables
of the image definition without autocommit, as it writes them. A table
that it cannot open then leaves the files as they were.
2026-10-16 18:37:59 -03:00
Vinícius Ferrão dd15396eef test(imgport): run the litefile lookup through place_image
The litefile lookup test called make_files, which places the litefile
of the bundle before it reads it. The test now calls place_image, the
entry point of imgimport, so it does not depend on the step that places
the litefile.
2026-10-16 18:37:59 -03:00
Vinícius Ferrão 73b0f8fc0a test(imgport): cover the bundle file check of an import
Import bundles that lack the kernel, an extra file or a kit, and check
that each is reported and changes nothing.
2026-10-16 18:35:25 -03:00
Vinícius Ferrão de36cffe8e fix(imgport): check the files of a bundle before the import writes
imgimport moved the boot files and kits of a bundle without a check,
and copied the extra files after it had already written the image. A
bundle without its kernel or a kit then gave a broken image without
an error. A missing extra file failed the import after it published
the root image and wrote the image definition.

imgimport now checks the boot files, kits, extra files and raw image
files that the manifest names. It does this before it writes anything,
and reports each missing file.
2026-10-16 18:35:25 -03:00
Vinícius Ferrão ad528dfee6 test(imgport): cover the node check of an import
Import for a defined node and for an undefined one, and check that an
undefined node changes nothing.
2026-10-16 18:35:25 -03:00
Vinícius Ferrão 7838c3240a fix(imgport): check the nodes of an import before it writes anything
imgimport -n checked its nodes when it set their postscripts. By then
it had published the root image, placed the other files and written the
image definition. An undefined node then left a half-imported image.

imgimport now checks the nodes before it writes anything, and fails
with the same error.
2026-10-16 18:35:25 -03:00
Vinícius Ferrão c2d64d4e58 docs(test): describe profile artifact test prerequisites
List the native cases selected by CI, their dependencies and their isolation requirements. Distinguish rendered-artifact execution from operating-system and firmware boot qualification.
2026-10-16 18:33:42 -03:00
Vinícius Ferrão 1d362211e7 test(ubuntu): execute rendered Subiquity command sequences
Render Subiquity configuration with real database rows and execute the emitted commands in private namespaces. Check resulting files, failure ordering and the install-monitor handshake without rewriting shell fragments.
2026-10-16 18:33:42 -03:00
Vinícius Ferrão fdf18e24c3 test(packaging): run the generated Debian repository helper
Build a real package and repository, then execute the generated helper with representative host architectures and releases. Check its apt configuration and preserve unrelated sources.
2026-10-16 18:33:41 -03:00
Vinícius Ferrão 4c47d8b3ec test(netboot): execute selected RISC-V postinstall scripts
Run each selected postinstall script in an isolated filesystem. Check SELinux settings and fstab after repeated execution instead of comparing shell source.
2026-10-16 18:33:41 -03:00
Vinícius Ferrão 7af7b97a78 test(provisioning): execute rendered RISC-V install checks
Render the selected profiles with an isolated database. Check the installer data and run the emitted post-install blocks against a private filesystem, including the EFI fallback and missing-loader paths.

Run the native case from the source snapshot preserved before CI package builds.
2026-10-16 18:33:41 -03:00
Daniel Hilst d5da7b0b5c Merge pull request #7937 from VersatusHPC/refactor/r26-bmc-reuse
refactor(genesis): share BMC field readers
2026-10-16 18:19:18 -03:00
Daniel Hilst cf170b36c4 Merge pull request #7942 from VersatusHPC/feat/rootimg-sha256
feat(netboot): check the root image against its SHA-256 checksum
2026-10-16 18:18:10 -03:00
Daniel Hilst fb9541ffde Merge pull request #7949 from VersatusHPC/fix/table-commands
fix(table): refuse extra tabrestore fields and unknown chtab -d tables
2026-10-16 18:17:31 -03:00
Vinícius Ferrão e434f1cd27 test(network): reuse binary I/O for NetworkManager fixtures 2026-10-16 18:10:29 -03:00
Daniel Hilst fc020b6976 test(kvm): test the UEFI firmware decisions through xCAT::KVMUtils
kvm_uefi_firmware.t loaded the whole kvm plugin behind stubs and set
its package variables. It now loads only xCAT::KVMUtils and keeps
each assertion: the UEFI and SeaBIOS <os> element, the disk bus and
optical drive prefix, the SMBIOS block across a reconfigure, the
refusal of an unknown firmware value, and the vm.othersettings read
that creates no vm row. It also covers the clock offset, memory and
CPU count that reconfigure_domain writes.

Signed-off-by: Daniel Hilst <392820+dhilst@users.noreply.github.com>
2026-10-16 11:38:33 -03:00
Daniel Hilst 72e3dd8602 refactor(kvm): move the UEFI firmware decisions into xCAT::KVMUtils
kvm.pm made $parser, $node, $confdata and $updatetable package
variables so that kvm_uefi_firmware.t could set them and call
build_xmldesc and reconfigvm. That exposes plugin state to make it
testable, which xCAT::KVMUtils replaced for the other guest decisions.

xCAT::KVMUtils now holds vm_othersettings, requested_firmware,
firmware_error, guest_os, clock_offset and reconfigure_domain. Each one
takes its inputs as arguments. guest_os replaces build_oshash and the
<os> edits in build_xmldesc. reconfigure_domain replaces the XML
rewrite in reconfigvm and loads XML::LibXML when it is called. kvm.pm
calls these subs, and the four variables are file lexicals again.

Signed-off-by: Daniel Hilst <392820+dhilst@users.noreply.github.com>
2026-10-16 11:38:33 -03:00
Daniel Hilst 756b1807a1 Merge master into feat/secureboot-ipxe
Signed-off-by: Daniel Hilst <392820+dhilst@users.noreply.github.com>
2026-10-16 11:08:04 -03:00
Daniel Hilst 9329aea4c2 Merge master into feat/secureboot-ipxe
Signed-off-by: Daniel Hilst <392820+dhilst@users.noreply.github.com>
2026-10-16 11:03:31 -03:00
Daniel Hilst b17d37380a Merge pull request #7912 from VersatusHPC/fix/kvm-aarch64-guest-arch
fix(kvm): mkvm builds an aarch64 node as an x86_64 domain
2026-10-16 11:03:20 -03:00
Daniel Hilst d8c38ec6d2 Merge pull request #7906 from VersatusHPC/fix/openeuler-core-mock-resultdir-owner
fix(xcat-core): the openEuler ppc64le core build runs rpmbuild as root
2026-10-15 18:15:42 -03:00
Vinícius Ferrão e9dcd9f631 docs(test): describe BMC sandbox coverage 2026-10-15 15:09:51 -03:00
Vinícius Ferrão b784c95e06 test(genesis): cover BMC configuration field behavior 2026-10-15 15:09:10 -03:00
Vinícius Ferrão f7621a6cae refactor(genesis): share BMC configuration field reads 2026-10-15 15:09:10 -03:00
Vinícius Ferrão dcf68e8afb test(genesis): cover BMC LAN query and retry behavior 2026-10-15 15:09:10 -03:00
Vinícius Ferrão e70cd9a961 refactor(genesis): share BMC LAN field queries 2026-10-15 15:09:09 -03:00
Daniel Hilst 39c12e119b fix(xcat-core): give the release repository test a stand-in for mock's loader
buildall now calls prepare_mock_resultdirs before the cache checks, so a
cached build also loads the mock configuration through mockbuild.config.
release_repository.t builds xCAT-release in a user namespace on a host
without mock, and the build stopped with "mock is not installed: cannot
import mockbuild.config".

The namespace fixture already stands in for /etc/mock. It now also puts a
stand-in mockbuild package on PYTHONPATH. Its load_config fails when the
chroot configuration is missing, and reports the caller as chrootuid, as
mock does when no chrootuid is set. buildrpms.pl is unchanged.

Signed-off-by: Daniel Hilst <392820+dhilst@users.noreply.github.com>
2026-10-15 14:42:47 -03:00
Daniel Hilst 7c011fc9e5 Merge pull request #7916 from VersatusHPC/fix/probe-debian-directory-permissions
fix(probe): preserve Debian library directory permissions
2026-10-15 13:53:54 -03:00