From b06b77f5a557cd07d8c4fb1d8dd50b14a327f469 Mon Sep 17 00:00:00 2001 From: Jarrod Johnson Date: Tue, 23 May 2023 17:22:38 -0400 Subject: [PATCH] Fix issues with confluent media deployment on multi-nics in routed env --- .../dracut/hooks/pre-trigger/01-confluent.sh | 60 +++++++++++++------ 1 file changed, 43 insertions(+), 17 deletions(-) diff --git a/confluent_osdeploy/el8/initramfs/usr/lib/dracut/hooks/pre-trigger/01-confluent.sh b/confluent_osdeploy/el8/initramfs/usr/lib/dracut/hooks/pre-trigger/01-confluent.sh index 73e572a1..6e4be465 100644 --- a/confluent_osdeploy/el8/initramfs/usr/lib/dracut/hooks/pre-trigger/01-confluent.sh +++ b/confluent_osdeploy/el8/initramfs/usr/lib/dracut/hooks/pre-trigger/01-confluent.sh @@ -55,21 +55,47 @@ if [ -e /dev/disk/by-label/CNFLNT_IDNT ]; then sed -n '/^net_cfgs:/, /^[^- ]/{/^[^- ]/!p}' cnflnt.yml |sed -n '/^-/, /^-/{/^-/!p}'| sed -e 's/^[- ]*//'> $tcfg autoconfigmethod=$(grep ^ipv4_method: $tcfg) autoconfigmethod=${autoconfigmethod#ipv4_method: } - if [ "$autoconfigmethod" = "dhcp" ]; then - /usr/libexec/nm-initrd-generator ip=:dhcp - else - v4addr=$(grep ^ipv4_address: $tcfg) - v4addr=${v4addr#ipv4_address: } - v4addr=${v4addr%/*} - v4gw=$(grep ^ipv4_gateway: $tcfg) - v4gw=${v4gw#ipv4_gateway: } - if [ "$v4gw" = "null" ]; then - v4gw="" + for i in /sys/class/net/*; do + ip link set $(basename $i) down + udevadm info $i | grep ID_NET_DRIVER=cdc_ether > /dev/null && continue + ip link set $(basename $i) up + done + for NICGUESS in $(ip link|grep LOWER_UP|grep -v LOOPBACK| awk '{print $2}' | sed -e 's/:$//'); do + if [ "$autoconfigmethod" = "dhcp" ]; then + /usr/libexec/nm-initrd-generator ip=$NICGUESS:dhcp + else + v4addr=$(grep ^ipv4_address: $tcfg) + v4addr=${v4addr#ipv4_address: } + v4plen=${v4addr#*/} + v4addr=${v4addr%/*} + v4gw=$(grep ^ipv4_gateway: $tcfg) + v4gw=${v4gw#ipv4_gateway: } + ip addr add dev $NICGUESS $v4addr/$v4plen + if [ "$v4gw" = "null" ]; then + v4gw="" + fi + if [ ! -z "$v4gw" ]; then + ip route add default via $v4gw + fi + v4nm=$(grep ipv4_netmask: $tcfg) + v4nm=${v4nm#ipv4_netmask: } + DETECTED=0 + for dsrv in $deploysrvs; do + if curl --capath /tls/ -s --connect-timeout 1 https://$dsrv/confluent-public/ > /dev/null; then + /usr/libexec/nm-initrd-generator ip=$v4addr::$v4gw:$v4nm:$hostname:$NICGUESS:none + DETECTED=1 + break + fi + done + if [ ! -z "$v4gw" ]; then + ip route del default via $v4gw + fi + ip addr flush dev $NICGUESS + if [ $DETECTED = 1 ]; then + break + fi fi - v4nm=$(grep ipv4_netmask: $tcfg) - v4nm=${v4nm#ipv4_netmask: } - /usr/libexec/nm-initrd-generator ip=$v4addr::$v4gw:$v4nm:$hostname::none - fi + done NetworkManager --configure-and-quit=initrd --no-daemon hmackeyfile=/tmp/cnflnthmackeytmp echo -n $(grep ^apitoken: cnflnt.yml|awk '{print $2}') > $hmackeyfile @@ -85,10 +111,10 @@ if [ -e /dev/disk/by-label/CNFLNT_IDNT ]; then echo 'MANAGER: '$deploysrv >> /etc/confluent/confluent.info done for deployer in $deploysrvs; do - if curl -f -H "CONFLUENT_NODENAME: $nodename" -H "CONFLUENT_CRYPTHMAC: $(cat $hmacfile)" -d@$passcrypt -k https://$deployer/confluent-api/self/registerapikey; then + if curl --capath /tls/ -f -H "CONFLUENT_NODENAME: $nodename" -H "CONFLUENT_CRYPTHMAC: $(cat $hmacfile)" -d@$passcrypt -k https://$deployer/confluent-api/self/registerapikey; then cp $passfile /etc/confluent/confluent.apikey confluent_apikey=$(cat /etc/confluent/confluent.apikey) - curl -sf -H "CONFLUENT_NODENAME: $nodename" -H "CONFLUENT_APIKEY: $confluent_apikey" https://$deployer/confluent-api/self/deploycfg2 > /etc/confluent/confluent.deploycfg + curl --capath /tls/ -sf -H "CONFLUENT_NODENAME: $nodename" -H "CONFLUENT_APIKEY: $confluent_apikey" https://$deployer/confluent-api/self/deploycfg2 > /etc/confluent/confluent.deploycfg confluent_profile=$(grep ^profile: /etc/confluent/confluent.deploycfg) confluent_profile=${confluent_profile#profile: } mgr=$deployer @@ -114,7 +140,7 @@ if ! grep MANAGER: /etc/confluent/confluent.info; then for mac in $(ip -br link|grep -v LOOPBACK|awk '{print $3}'); do myids=$myids"/mac="$mac done - myname=$(curl -sH "CONFLUENT_IDS: $myids" https://$confluenthttpsrv/confluent-api/self/whoami) + myname=$(curl --capath /tls/ -sH "CONFLUENT_IDS: $myids" https://$confluenthttpsrv/confluent-api/self/whoami) if [ ! -z "$myname" ]; then echo NODENAME: $myname > /etc/confluent/confluent.info echo MANAGER: $confluentsrv >> /etc/confluent/confluent.info