From 8f1ece8da70fed56354714d1fb7883a5964daabb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vin=C3=ADcius=20Ferr=C3=A3o?= <2031761+viniciusferrao@users.noreply.github.com> Date: Mon, 12 Oct 2026 19:10:41 -0300 Subject: [PATCH] refactor(genesis): share status publication across services Preserve component labels, failure messages and exit policy at each caller. Give the runtime library its own package so discovery does not depend on the init package that already depends on discovery. --- .../xcat-genesis-common_1.0.bb | 17 +++++++++++++++++ .../xcat-genesis-init/files/genesis-action | 1 + .../xcat-genesis-init/files/genesis-functions | 6 +++--- .../files/genesis-network-state | 2 +- .../xcat-genesis-init/files/genesis-register | 2 +- .../xcat-genesis-init/xcat-genesis-init_1.0.bb | 6 +----- .../files/genesis-discover | 7 +++++-- .../files/genesis-getcert | 7 +++++-- .../xcat-genesis-discovery_1.0.bb | 2 +- 9 files changed, 35 insertions(+), 15 deletions(-) create mode 100644 xCAT-genesis-base/oe/meta-xcat-genesis/recipes-core/xcat-genesis-common/xcat-genesis-common_1.0.bb diff --git a/xCAT-genesis-base/oe/meta-xcat-genesis/recipes-core/xcat-genesis-common/xcat-genesis-common_1.0.bb b/xCAT-genesis-base/oe/meta-xcat-genesis/recipes-core/xcat-genesis-common/xcat-genesis-common_1.0.bb new file mode 100644 index 000000000..a6d647a0d --- /dev/null +++ b/xCAT-genesis-base/oe/meta-xcat-genesis/recipes-core/xcat-genesis-common/xcat-genesis-common_1.0.bb @@ -0,0 +1,17 @@ +SUMMARY = "xCAT Genesis runtime functions" +LICENSE = "EPL-1.0" +LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/EPL-1.0;md5=57f8d5e2b3e98ac6e088986c12bf94e6" + +FILESEXTRAPATHS:prepend := "${THISDIR}/../xcat-genesis-init/files:" +SRC_URI = "file://genesis-functions" +S = "${UNPACKDIR}" + +RDEPENDS:${PN} = "bash util-linux-logger" + +do_install() { + install -d ${D}${libexecdir}/xcat + install -m 0644 ${UNPACKDIR}/genesis-functions \ + ${D}${libexecdir}/xcat/genesis-functions +} + +FILES:${PN} = "${libexecdir}/xcat/genesis-functions" diff --git a/xCAT-genesis-base/oe/meta-xcat-genesis/recipes-core/xcat-genesis-init/files/genesis-action b/xCAT-genesis-base/oe/meta-xcat-genesis/recipes-core/xcat-genesis-init/files/genesis-action index f82e6d3ee..64b5acf85 100755 --- a/xCAT-genesis-base/oe/meta-xcat-genesis/recipes-core/xcat-genesis-init/files/genesis-action +++ b/xCAT-genesis-base/oe/meta-xcat-genesis/recipes-core/xcat-genesis-init/files/genesis-action @@ -43,6 +43,7 @@ publish_status() { [[ -z $last_verified_seconds ]] \ || fields+=("VERIFIED_SECONDS=$last_verified_seconds") genesis_publish_status "$status_command" action xcat-genesis-action \ + 'unable to publish action status' \ "$state" "$detail" "${fields[@]}" "$@" } diff --git a/xCAT-genesis-base/oe/meta-xcat-genesis/recipes-core/xcat-genesis-init/files/genesis-functions b/xCAT-genesis-base/oe/meta-xcat-genesis/recipes-core/xcat-genesis-init/files/genesis-functions index e62db52d3..2c805202c 100644 --- a/xCAT-genesis-base/oe/meta-xcat-genesis/recipes-core/xcat-genesis-init/files/genesis-functions +++ b/xCAT-genesis-base/oe/meta-xcat-genesis/recipes-core/xcat-genesis-init/files/genesis-functions @@ -1,9 +1,9 @@ genesis_publish_status() { - local status_command=$1 component=$2 log_tag=$3 - shift 3 + local status_command=$1 component=$2 log_tag=$3 log_message=$4 + shift 4 "$status_command" "$component" "$@" \ - || logger -t "$log_tag" -- "unable to publish $component status" + || logger -t "$log_tag" -- "$log_message" } genesis_uptime_seconds() { diff --git a/xCAT-genesis-base/oe/meta-xcat-genesis/recipes-core/xcat-genesis-init/files/genesis-network-state b/xCAT-genesis-base/oe/meta-xcat-genesis/recipes-core/xcat-genesis-init/files/genesis-network-state index c9b342246..706213a0c 100644 --- a/xCAT-genesis-base/oe/meta-xcat-genesis/recipes-core/xcat-genesis-init/files/genesis-network-state +++ b/xCAT-genesis-base/oe/meta-xcat-genesis/recipes-core/xcat-genesis-init/files/genesis-network-state @@ -16,7 +16,7 @@ failure_recovery='Check the management network and boot parameters' publish_status() { genesis_publish_status "$status_command" network \ - xcat-genesis-network-state "$@" + xcat-genesis-network-state 'unable to publish network status' "$@" } finish_status() { diff --git a/xCAT-genesis-base/oe/meta-xcat-genesis/recipes-core/xcat-genesis-init/files/genesis-register b/xCAT-genesis-base/oe/meta-xcat-genesis/recipes-core/xcat-genesis-init/files/genesis-register index ec01820d7..831f27f97 100644 --- a/xCAT-genesis-base/oe/meta-xcat-genesis/recipes-core/xcat-genesis-init/files/genesis-register +++ b/xCAT-genesis-base/oe/meta-xcat-genesis/recipes-core/xcat-genesis-init/files/genesis-register @@ -27,7 +27,7 @@ declare -a cmdline_arguments publish_status() { genesis_publish_status "$status_command" registration \ - xcat-genesis-register "$@" + xcat-genesis-register 'unable to publish registration status' "$@" } finish_status() { diff --git a/xCAT-genesis-base/oe/meta-xcat-genesis/recipes-core/xcat-genesis-init/xcat-genesis-init_1.0.bb b/xCAT-genesis-base/oe/meta-xcat-genesis/recipes-core/xcat-genesis-init/xcat-genesis-init_1.0.bb index 29cdb1289..6848f9c69 100644 --- a/xCAT-genesis-base/oe/meta-xcat-genesis/recipes-core/xcat-genesis-init/xcat-genesis-init_1.0.bb +++ b/xCAT-genesis-base/oe/meta-xcat-genesis/recipes-core/xcat-genesis-init/xcat-genesis-init_1.0.bb @@ -3,7 +3,6 @@ LICENSE = "EPL-1.0" LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/EPL-1.0;md5=57f8d5e2b3e98ac6e088986c12bf94e6" SRC_URI = "file://00-xcat-genesis.preset \ - file://genesis-functions \ file://genesis-maintenance-shell \ file://genesis-action \ file://genesis-metrics \ @@ -21,7 +20,7 @@ S = "${UNPACKDIR}" inherit systemd -RDEPENDS:${PN} = "bash coreutils ipmitool iproute2 networkmanager-nmcli util-linux-logger xcat-genesis-discovery xcat-genesis-protocol" +RDEPENDS:${PN} = "bash coreutils ipmitool iproute2 networkmanager-nmcli util-linux-logger xcat-genesis-common xcat-genesis-discovery xcat-genesis-protocol" SYSTEMD_SERVICE:${PN} = "xcat-genesis-action.service \ xcat-genesis-metrics.service \ @@ -32,8 +31,6 @@ SYSTEMD_AUTO_ENABLE = "enable" do_install() { install -d ${D}${libexecdir}/xcat - install -m 0644 ${UNPACKDIR}/genesis-functions \ - ${D}${libexecdir}/xcat/genesis-functions install -m 0755 ${UNPACKDIR}/genesis-maintenance-shell \ ${D}${libexecdir}/xcat/genesis-maintenance-shell install -m 0755 ${UNPACKDIR}/genesis-action \ @@ -67,7 +64,6 @@ do_install() { } FILES:${PN} = "${libexecdir}/xcat/genesis-maintenance-shell \ - ${libexecdir}/xcat/genesis-functions \ ${libexecdir}/xcat/genesis-action \ ${libexecdir}/xcat/genesis-metrics \ ${libexecdir}/xcat/genesis-network-refresh \ diff --git a/xCAT-genesis-base/oe/meta-xcat-genesis/recipes-xcat/xcat-genesis-discovery/files/genesis-discover b/xCAT-genesis-base/oe/meta-xcat-genesis/recipes-xcat/xcat-genesis-discovery/files/genesis-discover index 392078604..cb0b4b3d4 100755 --- a/xCAT-genesis-base/oe/meta-xcat-genesis/recipes-xcat/xcat-genesis-discovery/files/genesis-discover +++ b/xCAT-genesis-base/oe/meta-xcat-genesis/recipes-xcat/xcat-genesis-discovery/files/genesis-discover @@ -1,6 +1,9 @@ #!/bin/bash set -euo pipefail +functions_file=${XCAT_GENESIS_FUNCTIONS:-/usr/libexec/xcat/genesis-functions} +source "$functions_file" + state_dir=${XCAT_STATE_DIR:-/run/xcat} status_command=${XCAT_STATUS_COMMAND:-/usr/libexec/xcat/genesis-status} network_file=${XCAT_NETWORK_FILE:-$state_dir/genesis.env} @@ -22,8 +25,8 @@ temporary_dir= [[ "$retry_seconds" =~ ^[0-9]+$ ]] || retry_seconds=5 publish_status() { - "$status_command" discovery "$@" \ - || logger -t xcat-genesis-discover -- 'unable to publish discovery status' + genesis_publish_status "$status_command" discovery \ + xcat-genesis-discover 'unable to publish discovery status' "$@" } # shellcheck disable=SC2317,SC2329 diff --git a/xCAT-genesis-base/oe/meta-xcat-genesis/recipes-xcat/xcat-genesis-discovery/files/genesis-getcert b/xCAT-genesis-base/oe/meta-xcat-genesis/recipes-xcat/xcat-genesis-discovery/files/genesis-getcert index a8f7d8cdc..787cddef6 100755 --- a/xCAT-genesis-base/oe/meta-xcat-genesis/recipes-xcat/xcat-genesis-discovery/files/genesis-getcert +++ b/xCAT-genesis-base/oe/meta-xcat-genesis/recipes-xcat/xcat-genesis-discovery/files/genesis-getcert @@ -1,6 +1,9 @@ #!/bin/bash set -euo pipefail +functions_file=${XCAT_GENESIS_FUNCTIONS:-/usr/libexec/xcat/genesis-functions} +source "$functions_file" + state_dir=${XCAT_STATE_DIR:-/run/xcat} status_command=${XCAT_STATUS_COMMAND:-/usr/libexec/xcat/genesis-status} network_file=${XCAT_NETWORK_FILE:-$state_dir/genesis.env} @@ -15,8 +18,8 @@ temporary_dir= [[ "$request_timeout" =~ ^[1-9][0-9]*$ ]] || request_timeout=20 publish_status() { - "$status_command" credentials "$@" \ - || logger -t xcat-genesis-getcert -- 'unable to publish credential status' + genesis_publish_status "$status_command" credentials \ + xcat-genesis-getcert 'unable to publish credential status' "$@" } # shellcheck disable=SC2329 diff --git a/xCAT-genesis-base/oe/meta-xcat-genesis/recipes-xcat/xcat-genesis-discovery/xcat-genesis-discovery_1.0.bb b/xCAT-genesis-base/oe/meta-xcat-genesis/recipes-xcat/xcat-genesis-discovery/xcat-genesis-discovery_1.0.bb index 47d307cec..5b4e31752 100644 --- a/xCAT-genesis-base/oe/meta-xcat-genesis/recipes-xcat/xcat-genesis-discovery/xcat-genesis-discovery_1.0.bb +++ b/xCAT-genesis-base/oe/meta-xcat-genesis/recipes-xcat/xcat-genesis-discovery/xcat-genesis-discovery_1.0.bb @@ -22,7 +22,7 @@ do_compile() { -o genesis-udp-send } -RDEPENDS:${PN} = "bash coreutils gzip iproute2 openssl-bin util-linux-logger util-linux-lsblk" +RDEPENDS:${PN} = "bash coreutils gzip iproute2 openssl-bin util-linux-logger util-linux-lsblk xcat-genesis-common" SYSTEMD_SERVICE:${PN} = "xcat-genesis-discovery.socket \ xcat-genesis-credential.socket \