Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package cloud-netconfig for openSUSE:Factory checked in at 2024-02-09 23:53:59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/cloud-netconfig (Old) and /work/SRC/openSUSE:Factory/.cloud-netconfig.new.1815 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "cloud-netconfig" Fri Feb 9 23:53:59 2024 rev:17 rq:1145375 version:1.11 Changes: -------- --- /work/SRC/openSUSE:Factory/cloud-netconfig/cloud-netconfig.changes 2024-01-19 23:03:01.335841887 +0100 +++ /work/SRC/openSUSE:Factory/.cloud-netconfig.new.1815/cloud-netconfig.changes 2024-02-09 23:54:17.627231565 +0100 @@ -1,0 +2,13 @@ +Thu Feb 8 10:15:40 UTC 2024 - Joachim Gleissner <jgleiss...@suse.com> + +- Update to version 1.11: + + Revert address metadata lookup in GCE to local lookup (bsc#1219454) + + Fix hang on warning log messages + + Check whether getting IPv4 addresses from metadata failed and abort + if true + + Only delete policy rules if they exist + + Skip adding/removing IPv4 ranges if metdata lookup failed + + Improve error handling and logging in Azure + + Set SCRIPTDIR when installing netconfig wrapper + +------------------------------------------------------------------- Old: ---- cloud-netconfig-1.10.tar.bz2 New: ---- cloud-netconfig-1.11.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ cloud-netconfig.spec ++++++ --- /var/tmp/diff_new_pack.D0LPKj/_old 2024-02-09 23:54:18.699270196 +0100 +++ /var/tmp/diff_new_pack.D0LPKj/_new 2024-02-09 23:54:18.699270196 +0100 @@ -48,7 +48,7 @@ %endif Name: %{base_name}%{flavor_suffix} -Version: 1.10 +Version: 1.11 Release: 0 License: GPL-3.0-or-later Summary: Network configuration scripts for %{csp_string} @@ -105,6 +105,7 @@ %if %{with_sysconfig} == 1 make install-netconfig-wrapper \ + SCRIPTDIR=%{_scriptdir} \ DESTDIR=%{buildroot} \ NETCONFIGDIR=%{_netconfigdir} ++++++ cloud-netconfig-1.10.tar.bz2 -> cloud-netconfig-1.11.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cloud-netconfig-1.10/VERSION new/cloud-netconfig-1.11/VERSION --- old/cloud-netconfig-1.10/VERSION 2024-01-19 15:06:12.618005849 +0100 +++ new/cloud-netconfig-1.11/VERSION 2024-02-08 10:49:37.345858048 +0100 @@ -1 +1 @@ -1.10 +1.11 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cloud-netconfig-1.10/azure/functions.cloud-netconfig new/cloud-netconfig-1.11/azure/functions.cloud-netconfig --- old/cloud-netconfig-1.10/azure/functions.cloud-netconfig 2023-08-30 08:26:20.267597602 +0200 +++ new/cloud-netconfig-1.11/azure/functions.cloud-netconfig 2024-02-08 10:49:19.979019815 +0100 @@ -1,6 +1,6 @@ #!/bin/bash -# Copyright (c) 2017 SUSE Linux GmbH +# Copyright (c) 2017-2024 SUSE Linux GmbH # # This file is part of cloud-netconfig. # @@ -19,8 +19,8 @@ METADATA_BASE_URL="http://169.254.169.254/metadata/instance/network/interface/" URL_HDR="Metadata:true" URL_APX='?format=text&api-version=2017-04-02' -CURL="curl -m 3 --noproxy 169.254.169.254 -H $URL_HDR" - +CURL="curl -m 3 --noproxy 169.254.169.254 --no-progress-meter -H $URL_HDR" +LOG_CURL="logger -t cloud-netconfig -e" # ------------------------------------------------------------------- # look up a meta data item @@ -28,19 +28,30 @@ get_from_metadata() { local url="${METADATA_BASE_URL}${1}${URL_APX}" - local result=$($CURL $url 2>/dev/null) - local count=0 + local count=0 result response_file + response_file=$(mktemp /tmp/cn-response.XXXXXX) || return 1 + result=$($CURL -D $response_file $url 2> >($LOG_CURL)) || return 1 while [[ $result == "Too many requests" ]]; do count=$((count+1)) if [[ $count -gt 10 ]]; then - return + return 1 fi sleep 0.5 - result=$($CURL $url | tr -d ' \n' 2>/dev/null) + result=$($CURL -D $response_file $url 2> >($LOG_CURL)) || return 1 done - echo -n $result + local http_ver http_code text + read http_ver http_code text < $response_file + rm $response_file + if [[ $http_code == 200 ]]; then + echo -n $result + return 0 + else + logger -t cloud-netconfig "Error: metadata server returned $http_code" + test -n "$result" && logger -t cloud-netconfig "Response: $result" + return 1 + fi } @@ -54,6 +65,7 @@ test -z "$if_idx" && return get_from_metadata "${if_idx}/macAddress" + return $? } # ------------------------------------------------------------------- @@ -62,14 +74,15 @@ # get_ipv4_addresses_by_index() { - local if_idx="$1" count=0 prefixlen="$2" + local if_idx="$1" count=0 prefixlen="$2" indices test -z "$if_idx" && return - for idx in `get_from_metadata "${if_idx}/ipv4/ipAddress"` ; do + indices=$(get_from_metadata "${if_idx}/ipv4/ipAddress") || return 1 + for idx in $indices ; do [[ $count -ge 1 ]] && echo -n " " - get_from_metadata "${if_idx}/ipv4/ipAddress/${idx}privateIpAddress" + get_from_metadata "${if_idx}/ipv4/ipAddress/${idx}privateIpAddress" || return 1 echo -n "/" - get_from_metadata "${if_idx}/ipv4/subnet/0/prefix" + get_from_metadata "${if_idx}/ipv4/subnet/0/prefix" || return 1 count=$((count+1)) done } @@ -79,14 +92,15 @@ # get_ipv4_addresses_from_metadata() { - local idx hwaddr="$1" + local idx indices hwaddr="$1" test -z "$hwaddr" && return 1 local oldopt=$(shopt -p nocasematch) shopt -s nocasematch - for idx in $(get_from_metadata) ; do + indices=$(get_from_metadata) || return 1 + for idx in $indices ; do if [[ "$(get_iface_mac ${idx%/*})" == "${hwaddr//:/}" ]]; then - get_ipv4_addresses_by_index ${idx%/*} + get_ipv4_addresses_by_index ${idx%/*} || return 1 fi done eval "$oldopt" Binary files old/cloud-netconfig-1.10/cloud-netconfig-1.9.tar.bz2 and new/cloud-netconfig-1.11/cloud-netconfig-1.9.tar.bz2 differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cloud-netconfig-1.10/cloud-netconfig.spec new/cloud-netconfig-1.11/cloud-netconfig.spec --- old/cloud-netconfig-1.10/cloud-netconfig.spec 2024-01-19 15:06:12.618005849 +0100 +++ new/cloud-netconfig-1.11/cloud-netconfig.spec 2024-02-08 11:11:25.225825334 +0100 @@ -48,7 +48,7 @@ %endif Name: %{base_name}%{flavor_suffix} -Version: 1.10 +Version: 1.11 Release: 0 License: GPL-3.0-or-later Summary: Network configuration scripts for %{csp_string} @@ -105,6 +105,7 @@ %if %{with_sysconfig} == 1 make install-netconfig-wrapper \ + SCRIPTDIR=%{_scriptdir} \ DESTDIR=%{buildroot} \ NETCONFIGDIR=%{_netconfigdir} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cloud-netconfig-1.10/common/cloud-netconfig new/cloud-netconfig-1.11/common/cloud-netconfig --- old/cloud-netconfig-1.10/common/cloud-netconfig 2024-01-17 12:21:34.456920222 +0100 +++ new/cloud-netconfig-1.11/common/cloud-netconfig 2024-02-08 10:49:19.979019815 +0100 @@ -44,7 +44,7 @@ warn() { test $LOGLEVEL -lt 1 && return - logger $LOGGER_OPTS -p warn -t "$*" + logger $LOGGER_OPTS -p warn "$*" } # ------------------------------------------------------------------- @@ -414,8 +414,13 @@ # get active and configured addresses local laddrs=($(get_ipv4_addresses_from_interface $INTERFACE)) - local raddrs addr - for addr in $(get_ipv4_addresses_from_metadata $HWADDR) ; do + local raddrs addr addrs + addrs=$(get_ipv4_addresses_from_metadata $HWADDR) + if [[ $? -ne 0 ]]; then + warn "error getting IPv4 addresses from metadata, aborting configuration of $INTERFACE" + return + fi + for addr in $addrs ; do # validate whether element looks like an IPv4 address if [[ $addr =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/[0-9]{1,2}$ ]]; then raddrs+=($addr) @@ -449,8 +454,10 @@ log "removing address $addr from interface $INTERFACE" ip -4 addr del $addr dev $INTERFACE - # drop routing policy rule - ip -4 rule del from ${addr%/*} + # drop routing policy rules, if any + ip -4 rule show from ${addr%/*} | while read rule ; do + ip -4 rule del from ${addr%/*} prio ${rule%:*} + done # remove from address log remove_addr_from_log $INTERFACE $addr @@ -466,25 +473,29 @@ done local ip_ranges=$(get_ipv4_ranges_from_metadata $HWADDR) - local local_route - for ipr in $ip_ranges; do - local_route=$(ip r show $ipr type local table local) - if [[ -z $local_route ]]; then - debug "No local route for IP range $ipr, creating one" - ip -4 r add local $ipr dev $INTERFACE table local - add_addr_to_log $INTERFACE $ipr aliases_ - fi - done - # check if cloud-netconfig configured IP aliases were removed - local cn_ip_ranges=$(get_cn_assigned_addrs $INTERFACE ranges_) - if [[ -n $cn_ip_ranges ]]; then - for ipr in $cn_ip_ranges ; do - if [[ " $ip_ranges " == *" $ipr "* ]]; then - debug "IP range $ipr was removed, dropping local route" - ip -4 r del local $ipr dev $INTERFACE table local - remove_addr_from_log $INTERFACE $ipr ranges_ + if [[ $? -eq 0 ]]; then + local local_route + for ipr in $ip_ranges; do + local_route=$(ip r show $ipr type local table local) + if [[ -z $local_route ]]; then + debug "No local route for IP range $ipr, creating one" + ip -4 r add local $ipr dev $INTERFACE table local + add_addr_to_log $INTERFACE $ipr aliases_ fi done + # check if cloud-netconfig configured IP aliases were removed + local cn_ip_ranges=$(get_cn_assigned_addrs $INTERFACE ranges_) + if [[ -n $cn_ip_ranges ]]; then + for ipr in $cn_ip_ranges ; do + if [[ " $ip_ranges " == *" $ipr "* ]]; then + debug "IP range $ipr was removed, dropping local route" + ip -4 r del local $ipr dev $INTERFACE table local + remove_addr_from_log $INTERFACE $ipr ranges_ + fi + done + fi + else + warn "error getting IPv4 ranges from metadata, skipping ranges configuration on $INTERFACE" fi # If we have a single NIC configuration, skip routing policies @@ -525,26 +536,6 @@ # copy specific routes from the default routing table update_routing_tables -4 $INTERFACE $dest_table $gw_table - # update routing policies so connections from addresses on - # secondary interfaces are routed via those - # also include IP rangers - #local found prio from ip rest - #for addr in ${raddrs[@]} $ip_ranges ; do - # found=0 - # while read -r prio from ip rest ; do - # if [[ "${addr%/32}" == "$ip" ]]; then - # found=1 - # break - # fi - # done < <(ip -4 rule show) - # if [[ $found == 0 ]]; then - # debug "creating policy rule for src address ${addr%/32}" - # #priority=$(get_free_priority $LOCAL_TABLE 4) - # ip -4 rule add from ${addr%/32} priority $dest_table lookup $dest_table - # #priority=$(get_free_priority $GW_TABLE 4) - # ip -4 rule add from ${addr%/32} priority $gw_table lookup $gw_table - # fi - #done local all_addrs=() for addr in ${raddrs[@]} ; do all_addrs+=("${addr%/*}") @@ -594,28 +585,6 @@ update_routing_tables -6 $INTERFACE $dest_table $gw_table local laddrs=($(get_ipv6_addresses_from_interface $INTERFACE)) update_routing_policies -6 $INTERFACE $dest_table $gw_table laddrs - - #local addr laddrs=($(get_ipv6_addresses_from_interface $INTERFACE)) - #local found prio from ip rest - #for addr in ${laddrs[@]} ; do - # found=0 - # while read -r prio from ip rest ; do - # if [[ "${addr%/*}" == "$ip" ]]; then - # found=1 - # break - # fi - # done < <(ip -6 rule show) - # if [[ $found == 0 ]]; then - # priority=$(get_free_priority $RTABLE 6) - # debug "creating policy rule for address ${addr%/*}" - # ip -6 rule add from ${addr%/*} priority $priority table $RTABLE - # fi - #done - - ## create main (w/o default) lookup rule, if necessary - #if [[ -z "$(ip -6 rule show prio 30399)" ]]; then - # ip -6 rule add from all table main prio 30399 suppress_prefixlength 0 - #fi } # ------------------------------------------------------------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cloud-netconfig-1.10/gce/functions.cloud-netconfig new/cloud-netconfig-1.11/gce/functions.cloud-netconfig --- old/cloud-netconfig-1.10/gce/functions.cloud-netconfig 2023-08-29 14:49:22.664389936 +0200 +++ new/cloud-netconfig-1.11/gce/functions.cloud-netconfig 2024-02-08 10:49:19.979019815 +0100 @@ -36,22 +36,21 @@ # get_ipv4_addresses_from_metadata() { - local hwaddr="$1" + local iface status mac if_match addr hwaddr="$1" test -z "$hwaddr" && return 1 - local nics=$(get_from_metadata) - for idx in $nics ; do - local mac=$(get_from_metadata "${idx}mac") - if [[ $mac == $hwaddr ]]; then - local addr=$(get_from_metadata ${idx}ip) - if [[ ${addr} == ${addr%/*} ]]; then - addr="${addr}/32" - fi - echo $addr - return 0 - fi - done - return 1 + while read -r iface status mac rest ; do + if [[ $mac == $hwaddr ]]; then + if_match=$iface + break + fi + done < <(ip -br -o -4 link show) + if [[ -n $if_match ]]; then + ip -br -4 -o addr show dev $if_match | awk '{ print $3 }' + else + return 1 + fi + return 0 } # -------------------------------------------------------------------