Skip to content
This repository was archived by the owner on Jun 3, 2026. It is now read-only.

Releases: Muthukumar-Subramaniam/server-hub

v2.1.6

Choose a tag to compare

@Muthukumar-Subramaniam Muthukumar-Subramaniam released this 26 Apr 07:14

📢 Release Notes - v2.1.6

Released: April 26, 2026

🐛 Bug Fixes

• Fixed VM mode deployment failing on Ubuntu hosts with chown: invalid group: 'qemu' — the QEMU group is libvirt-qemu on Debian/Ubuntu, not qemu

• Fixed kickstart file group ownership being silently reset to the user's default group by awk temp-file rewrites, potentially causing virt-install --initrd-inject permission failures

• Fixed [TASK] and [WARN] messages colliding on the same line when ISO was already mounted during re-deployment

🔧 Technical Details

• QEMU group detection now uses getent group to check for libvirt-qemu (Debian/Ubuntu) first, then qemu (RHEL/Fedora), with an explicit error if neither exists

• Moved chown to after all sed/awk kickstart file modifications — the awk '...' file > tmp && mv tmp file pattern creates new files with the user's default group, discarding the previously set QEMU group ownership

• ISO mount status now uses print_task_skip + print_warning on separate lines instead of inline print_warning with nskip flag, which was suppressing the newline and merging output with the [DONE] marker


Full Changelog: v2.1.5...v2.1.6

v2.1.5

Choose a tag to compare

@Muthukumar-Subramaniam Muthukumar-Subramaniam released this 26 Apr 06:29

📢 Release Notes - v2.1.5

Released: April 26, 2026

✨ Enhancements

• Reworked the resize command with a new positional keyword CLI: qlabvmctl resize [-f] [memory <GiB>] [cpu <count>] [disk <GiB>] [hostname] — replacing the old -t/-g/-c flag-based interface
• Added multi-resource resize support — memory, CPU, and OS disk can now be resized in a single invocation with one shutdown/start cycle
• Changed OS disk resize from additive to target-based — disk 100 now means "set OS disk to 100 GiB" instead of "add 100 GiB"
• Added interactive multi-select mode — choose multiple resources to resize (e.g., 1,3 or a for all) when no arguments are provided
• Added retained resource reporting during reimage — reimaging now shows an [INFO] message when CPU or memory is above defaults (2 vCPUs, 2 GiB)

🔧 Technical Details

• All resource validation (disk size comparison, max increase check) now runs before VM shutdown to avoid unnecessary downtime on invalid input
• Disk validation uses virsh domblkinfo as primary method (works on running VMs) with qemu-img info as fallback
• Maximum OS disk increase per operation raised from 50 GiB to 100 GiB
resize_order array tracks CLI argument order for consistent validation and execution sequencing
• Post-resize VM start and rootfs extension consolidated into fn_start_vm_after_resize() with centralized summary output
• New report-retained-resources.sh function uses virsh dominfo to check current vCPUs and memory against defaults
• Reimage resource reporting added to both golden-image and PXE reimage paths (not triggered during --clean-install)


Full Changelog: v2.1.4...v2.1.5

v2.1.4

Choose a tag to compare

@Muthukumar-Subramaniam Muthukumar-Subramaniam released this 21 Apr 22:56

📢 Release Notes - v2.1.4

Released: April 22, 2026

🐛 Bug Fixes

• Fixed VM creation failing with "could not load PC BIOS" on newer distros where system OVMF firmware ships as 4MB pflash format, incompatible with the default 2MB pflash device size

🔧 Technical Details

• Changed OVMF firmware selection to prefer the vendored 2MB firmware which works across all environments including nested virtualization
• System OVMF firmware paths are retained as fallback only if vendored firmware files are missing


Full Changelog: v2.1.3...v2.1.4

v2.1.3

Choose a tag to compare

@Muthukumar-Subramaniam Muthukumar-Subramaniam released this 21 Apr 21:09

📢 Release Notes - v2.1.3

Released: April 21, 2026

🐛 Bug Fixes

• Fixed ansible.posix collection not being installed when Ansible was already present on the system — the ansible-galaxy collection install step was inside the "install Ansible if not found" conditional block, so it was skipped entirely when upgrading from the full ansible package to ansible-core

🔧 Technical Details

• Moved ansible-galaxy collection install -r requirements.yml outside the if command -v ansible check in both setup.sh and deploy-lab-infra-server.sh so it always runs regardless of whether Ansible is already installed
ansible-galaxy is idempotent — it skips already-installed collections, so this adds no overhead on subsequent runs


Full Changelog: v2.1.2...v2.1.3

v2.1.2

Choose a tag to compare

@Muthukumar-Subramaniam Muthukumar-Subramaniam released this 21 Apr 19:55

📢 Release Notes - v2.1.2

Released: April 21, 2026

✨ Enhancements

• Replaced heavyweight ansible pip package (~100+ bundled collections) with lightweight ansible-core, installing only the ansible.posix collection needed by this project
• Added requirements.yml to declare ansible.posix as the sole external Ansible collection dependency
• Consolidated python3-pip and python3-cryptography into standard package install locations (kickstart %packages, Ansible role, deploy script REQUIRED_PACKAGES) instead of separate dnf install calls

🔧 Technical Details

• Project uses 15 ansible.builtin modules (shipped with ansible-core) and 3 ansible.posix modules (firewalld, mount, sysctl) — no other collections are needed
• Removed pip3 install --user packaging from all scripts — it is auto-pulled as a dependency of ansible-core
• Removed argcomplete and activate-global-python-argcomplete from all scripts — not needed for script-driven automation and caused intermittent failures on some machines
• Removed standalone install-ansible.sh — unused by any deployment workflow (both VM mode and host mode use setup.sh or deploy-lab-infra-server.sh)
• Added ansible-galaxy collection install -r requirements.yml step in setup.sh and deploy-lab-infra-server.sh after ansible-core installation


Full Changelog: v2.1.1...v2.1.2

v2.1.1

Choose a tag to compare

@Muthukumar-Subramaniam Muthukumar-Subramaniam released this 27 Mar 15:39

📢 Release Notes - v2.1.1

Released: March 27, 2026

🐛 Bug Fixes

• Fixed openSUSE VM password authentication failure caused by non-portable salt characters (+, /, =) in password hash — openssl rand -base64 was generating salts rejected by openSUSE's libxcrypt
• Fixed openSUSE version number extraction regex truncating 15.6 to 5.6, causing add-on repository URL failures during automated installation
• Fixed duplicate "Starting VM installation" info messages appearing during reimage operations

⚡ Performance Improvements

• Replaced per-VM virsh domiflist loop with single filesystem grep for MAC address collection — reduces MAC generation time from O(N) virsh calls to a single pass regardless of VM count
• Replaced virsh domiflist call with direct libvirt XML read for single-VM MAC address retrieval

✨ Enhancements

• Changed [WARN] color from magenta to yellow (standard warning convention) and [INFO] from cyan to magenta

🔧 Technical Details

collect_used_macs() now extracts MACs from /etc/libvirt/qemu/ XML definitions instead of iterating virsh domiflist per VM
get_vm_mac_address() reads MAC directly from /etc/libvirt/qemu/<vm>.xml instead of calling virsh domiflist
• Salt generation in deploy-lab-infra-server.sh switched from openssl rand -base64 to openssl rand -hex which only produces [0-9a-f] — safe for all Linux crypt implementations
• openSUSE version extraction replaced greedy sed regex with grep -oP '[0-9]+\.[0-9]+' to correctly capture full version numbers
• Removed redundant print_info calls from kvm-reimage-golden.sh and kvm-reimage-pxe.sh since start_vm_installation() already prints its own message


Full Changelog: v2.1.0...v2.1.1

v2.1.0

Choose a tag to compare

@Muthukumar-Subramaniam Muthukumar-Subramaniam released this 27 Mar 06:56

📢 Release Notes - v2.1.0

Released: March 27, 2026

✨ Enhancements

• Enabled self-signed SSL for the lab infra server's nginx, adding HTTPS on port 443 alongside existing HTTP on port 80
• Certificate includes full SAN coverage: server FQDN, short name, lab-infra-server alias (when applicable), IPv4 address, and IPv6 address
• Kickstart templates (RedHat, OpenSUSE, Ubuntu) now download and trust the lab infra server's SSL certificate during OS provisioning
• Golden-boot.sh downloads and installs the SSL certificate during re-imaging, ensuring reimaged VMs always trust the lab infra server
• Certificate distribution integrated into ksmanager.sh shared artifacts pipeline to survive rsync --delete cycles
• Added openssl to required packages across Ansible role, AlmaLinux kickstart template, and deployment script

🔧 Technical Details

• Certificate generation uses openssl CLI and is fully idempotent — repeated Ansible runs skip generation if cert already exists
• Alias SAN entries (lab-infra-server FQDN and short name) are conditionally added only when the server short name differs from lab-infra-server
• Certificate download in kickstarts is non-fatal (uses || true) to prevent install failures if certificate is not yet available on the lab infra server
• Golden-boot.sh uses distro-family detection (RedHat/Debian/OpenSUSE) to install the certificate in the correct trust store path
• ksmanager.sh copies the certificate from /etc/pki/tls/certs/ into the web root after each rsync cycle, with a guard for when the cert doesn't exist yet
• To regenerate the certificate (e.g., after SAN changes), delete /etc/pki/tls/private/<fqdn>-nginx-selfsigned.key and /etc/pki/tls/certs/<fqdn>-nginx-selfsigned.crt, then re-run the Ansible playbook


Full Changelog: v2.0.33...v2.1.0

v2.0.33

Choose a tag to compare

@Muthukumar-Subramaniam Muthukumar-Subramaniam released this 25 Mar 12:29

📢 Release Notes - v2.0.33

Released: March 25, 2026

🐛 Bug Fixes

• Fixed host removal failing when cleaning up provisioned hosts
• Fixed golden-image provisioning failing to store result data
• Fixed incorrect OS distribution name being reported after provisioning
• Fixed OS distribution and version leaking between VMs during multi-VM PXE operations
• Fixed reimage skipping confirmation prompt for multi-VM operations
• Fixed leftover provisioning artifacts when declining to rebuild an existing golden image

✨ Enhancements

• Added structured JSON provision results for each provisioned host, queryable via curl
• Added central host registry tracking all provisioned hosts
• Replaced log-parsing based result extraction with reliable JSON queries
• Added skipped VM tracking to reimage operation summaries

🔧 Technical Details

• Provision results are served via nginx and extracted using curl+jq, making the approach mode-agnostic (host mode and VM mode)
• Multi-VM loops now preserve original command-line parameters across iterations
• Reimage confirmation returns control to the caller instead of exiting, enabling proper per-VM skip handling
• Operation summaries support an optional SKIPPED section for declined reimages


Full Changelog: v2.0.32...v2.0.33

v2.0.32

Choose a tag to compare

@Muthukumar-Subramaniam Muthukumar-Subramaniam released this 25 Mar 04:17

📢 Release Notes - v2.0.32

Released: March 25, 2026

🐛 Bug Fixes & Improvements (dnsbinder)

• Fixed sed single-quote bug in bulk operations that prevented domain name stripping from hostnames
• Fixed recursive IPv4 validation bug where invalid input caused validation on stale data
• Fixed sed regex injection in delete and rename operations from unescaped zone file content
• Fixed subnet prefix false-match where shorter subnets could incorrectly match longer ones
• Fixed unescaped dots in grep/sed patterns, hostname regex rejecting single-char names, IFS leak, unquoted variables in bulk paths, and array length check
• Fixed non-functional lock file in bulk handler that was created but never checked
• Added mkdir-based spinlock with PID tracking for zone file concurrency protection — matching the locking pattern used in ksmanager
• Added EXIT/INT/TERM/HUP/QUIT trap handlers to guarantee lock release on any exit path
• All zone file mutations are now serialized under the zone lock with stale-lock detection
• Bulk operations acquire lock once at outer level; inner calls skip re-acquisition to avoid deadlock


Full Changelog: v2.0.31...v2.0.32

v2.0.31

Choose a tag to compare

@Muthukumar-Subramaniam Muthukumar-Subramaniam released this 24 Mar 03:10

📢 Release Notes - v2.0.31

Released: March 24, 2026

✨ Enhancements

• Updated Ubuntu LTS latest ISO reference from 24.04.3 to 24.04.4 in distro configuration.


Full Changelog: v2.0.30...v2.0.31