From 2d5eaf0d97acb0dda6b5f872653ad66dc1dc8c1d Mon Sep 17 00:00:00 2001 From: Reid Wahl Date: Tue, 26 Mar 2024 20:43:19 -0700 Subject: [PATCH] Fix: openstack-info: Ensure no newlines in openstack_ports This makes the openstack_ports variable match the format specified in the openstack-info metadata (see longdesc). It should be a comma-separated list of "SUBNET_ID:PORT_ID". It should not be SUBNET_A SUBNET_B:PORT_1,SUBNET_C SUBNET_D:PORT_2, But rather SUBNET_A:PORT1,SUBNET_B:PORT1,SUBNET_C:PORT2,SUBNET_D:PORT2 The newlines caused parsing issues in an experimental version of Pacemaker. Pacemaker is being fixed (https://github.com/ClusterLabs/pacemaker/pull/3395), but this illustrated an issue in openstack-info that makes parsing rather precarious. openstack-virtual-ip is capable of parsing either format without changes on a stable release of Pacemaker. However, looking ahead, it should be updated to use "attrd_updater --output-as=xml" to query the attribute, as the XML output is much easier and more reliable to parse. (It should check the Pacemaker feature set to determine whether XML output is available for attrd_updater.) Signed-off-by: Reid Wahl --- heartbeat/openstack-info.in | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/heartbeat/openstack-info.in b/heartbeat/openstack-info.in index 6502f1df..876e833c 100755 --- a/heartbeat/openstack-info.in +++ b/heartbeat/openstack-info.in @@ -164,10 +164,12 @@ OSInfoStats() { --format json \ --column fixed_ips \ ${port_id}") - subnet_id=$(echo "$subnet_result" | + subnet_ids=$(echo "$subnet_result" | grep -P '\"subnet_id\": \".*\",$' | grep -P -o '[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}') - value="${value}${subnet_id}:${port_id}," + for subnet_id in $subnet_ids; do + value="${value}${subnet_id}:${port_id}," + done done value=${value%,} -- 2.25.1