From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id 70C701FF13F for ; Thu, 29 Jan 2026 10:20:51 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 1EADA233B9; Thu, 29 Jan 2026 10:21:17 +0100 (CET) Message-ID: Date: Thu, 29 Jan 2026 10:20:27 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Beta Subject: Re: [pve-devel] [PATCH manager 01/10] api/pvestatd: broadcast and expose non-x86 host architecture To: Fiona Ebner , Proxmox VE development discussion References: <20260128123035.2576774-1-d.csapak@proxmox.com> <20260128123035.2576774-2-d.csapak@proxmox.com> <8ddda307-76c3-4177-8b79-c22116eaa12f@proxmox.com> Content-Language: en-US From: Dominik Csapak In-Reply-To: <8ddda307-76c3-4177-8b79-c22116eaa12f@proxmox.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1769678368308 X-SPAM-LEVEL: Spam detection results: 0 AWL -0.119 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment POISEN_SPAM_PILL 0.1 Meta: its spam POISEN_SPAM_PILL_1 0.1 random spam to be learned in bayes POISEN_SPAM_PILL_3 0.1 random spam to be learned in bayes RCVD_IN_VALIDITY_CERTIFIED_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_RPBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_SAFE_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Message-ID-Hash: F2P4NUU4CEPVCHMUAHUWG6FVP4PN6CDQ X-Message-ID-Hash: F2P4NUU4CEPVCHMUAHUWG6FVP4PN6CDQ X-MailFrom: d.csapak@proxmox.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox VE development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: On 1/28/26 5:04 PM, Fiona Ebner wrote: > Am 28.01.26 um 1:29 PM schrieb Dominik Csapak: >> in case a nodes runs a non-x86 kernel, broadcast that info into the > > typo: nodes -> node > >> 'static-info' hash to pmxcfs (once). Use that info to add an >> 'architecture' property to /cluster/resources. >> >> x86 nodes won't return a value here. >> >> Use 'POSIX::uname' for determining the architecture (from the running >> kernel). POSIX is used in this module anyway but was missing in the >> imports. >> >> Signed-off-by: Dominik Csapak >> --- >> PVE/API2/Cluster.pm | 9 +++++++++ >> PVE/API2/Nodes.pm | 3 ++- >> PVE/Service/pvestatd.pm | 10 ++++++++++ >> 3 files changed, 21 insertions(+), 1 deletion(-) >> >> diff --git a/PVE/API2/Cluster.pm b/PVE/API2/Cluster.pm >> index d6003a7d..73b948b5 100644 >> --- a/PVE/API2/Cluster.pm >> +++ b/PVE/API2/Cluster.pm >> @@ -484,6 +484,12 @@ __PACKAGE__->register_method({ >> type => "string", >> optional => 1, >> }, >> + architecture => { >> + description => "The nodes CPU architecture. (for type 'node').", > > typo: nodes -> node's > >> + type => 'string', > > could also be an enum i also thought about that but was not sure if we should limit ourselves in the response here. can do of course, and would add 'x86_64' and 'aarch64' > >> + default => 'x86_64', >> + optional => 1, >> + }, >> }, >> }, >> }, >> @@ -608,6 +614,9 @@ __PACKAGE__->register_method({ >> if (defined(my $mode = $info->{'cgroup-mode'})) { >> $entry->{'cgroup-mode'} = int($mode); >> } >> + if (defined(my $architecture = $info->{architecture})) { >> + $entry->{architecture} = $architecture; >> + } >> if (defined(my $status = $hastatus->{node_status}->{$node})) { >> $entry->{'hastate'} = $status; >> } >> diff --git a/PVE/API2/Nodes.pm b/PVE/API2/Nodes.pm >> index 5bd6fe49..9fddea9f 100644 >> --- a/PVE/API2/Nodes.pm >> +++ b/PVE/API2/Nodes.pm >> @@ -502,7 +502,8 @@ __PACKAGE__->register_method({ >> my ($avg1, $avg5, $avg15) = PVE::ProcFSTools::read_loadavg(); >> $res->{loadavg} = [$avg1, $avg5, $avg15]; >> >> - my ($current_kernel_info, $kversion_string) = get_current_kernel_info(); >> + my ($current_kernel_info, $kversion_string) = >> + PVE::NodeConfig::get_current_kernel_info(); > > Seems like an unrelated hunk from an older iteration of the patch? yep, in my first version i moved that function to reuse it, but ultimately decided against that since i only need one field from the uname call and we use the POSIX module here anyway.. > >> $res->{kversion} = $kversion_string; >> $res->{'current-kernel'} = $current_kernel_info; >> >> diff --git a/PVE/Service/pvestatd.pm b/PVE/Service/pvestatd.pm >> index 98d421f4..05f4061e 100755 >> --- a/PVE/Service/pvestatd.pm >> +++ b/PVE/Service/pvestatd.pm >> @@ -7,6 +7,7 @@ use PVE::SafeSyslog; >> use PVE::Daemon; >> >> use JSON; >> +use POSIX qw(); >> >> use Time::HiRes qw (gettimeofday); >> use PVE::Tools qw(dir_glob_foreach file_read_firstline); >> @@ -138,6 +139,8 @@ my sub broadcast_static_node_info { >> my $cgroup_mode = eval { PVE::CGroup::cgroup_mode(); }; >> syslog('err', "cgroup mode error: $@") if $@; >> >> + my (undef, undef, undef, undef, $architecture) = POSIX::uname(); >> + >> my $old = PVE::Cluster::get_node_kv('static-info', $nodename); >> $old = eval { decode_json($old->{$nodename}) } if defined($old->{$nodename}); >> >> @@ -147,11 +150,18 @@ my sub broadcast_static_node_info { >> || !defined($old->{memory}) >> || $old->{memory} != $memory >> || ($old->{'cgroup-mode'} // -1) != ($cgroup_mode // -1) >> + || (defined($architecture) >> + && $architecture ne 'x86_64' >> + && (!defined($old->{architecture}) || $old->{architecture} ne $architecture)) >> ) { >> my $info = { >> cpus => $cpus, >> memory => $memory, >> }; >> + >> + # only save architecture info for non-x86 ones >> + $info->{architecture} = $architecture; >> + >> $info->{'cgroup-mode'} = $cgroup_mode if defined($cgroup_mode); >> PVE::Cluster::broadcast_node_kv('static-info', encode_json($info)); >> } >