#!/bin/bash function test_mgr() { if curl -s https://${1}/confluent-api/ > /dev/null; then return 0 fi return 1 } function set_confluent_vars() { if [ -z "$nodename" ]; then nodename=$(grep ^NODENAME: /etc/confluent/confluent.info | awk '{print $2}') fi if [[ "$confluent_mgr" == *"%"* ]]; then confluent_mgr="" fi if [ -z "$confluent_mgr" ]; then confluent_mgr=$(grep ^deploy_server: /etc/confluent/confluent.deploycfg | sed -e 's/[^ ]*: //') if ! test_mgr $confluent_mgr; then confluent_mgr=$(grep ^deploy_server_v6: /etc/confluent/confluent.deploycfg | sed -e 's/[^ ]*: //') if [[ "$confluent_mgr" = *":"* ]]; then confluent_mgr="[$confluent_mgr]" fi fi if ! test_mgr $confluent_mgr; then BESTMGRS=$(grep ^EXTMGRINFO: /etc/confluent/confluent.info | grep '|1$' | sed -e 's/EXTMGRINFO: //' -e 's/|.*//') OKMGRS=$(grep ^EXTMGRINFO: /etc/confluent/confluent.info | grep '|0$' | sed -e 's/EXTMGRINFO: //' -e 's/|.*//') for confluent_mgr in $BESTMGRS $OKMGRS; do if [[ $confluent_mgr == *":"* ]]; then confluent_mgr="[$confluent_mgr]" fi if test_mgr $confluent_mgr; then break fi done fi fi if [ -z "$confluent_profile" ]; then confluent_profile=$(grep ^profile: /etc/confluent/confluent.deploycfg | sed -e 's/[^ ]*: //') fi } run_remote() { set_confluent_vars requestedcmd="'$*'" echo echo '---------------------------------------------------------------------------' echo Running $requestedcmd from https://$confluent_mgr/confluent-public/os/$confluent_profile/scripts/ tmpdir=$(mktemp -d) echo Executing in $tmpdir cd $tmpdir mkdir -p $(dirname $1) curl -f -sS https://$confluent_mgr/confluent-public/os/$confluent_profile/scripts/$1 > $1 if [ $? != 0 ]; then echo $requestedcmd failed to download; return 1; fi chmod +x $1 cmd=$1 shift ./$cmd $* retcode=$? echo "$requestedcmd exited with code $retcode" cd - > /dev/null return $retcode } source_remote_parts() { confluentscripttmpdir=$(mktemp -d) apiclient=/opt/confluent/bin/apiclient if [ -f /etc/confluent/apiclient ]; then apiclient=/etc/confluent/apiclient fi scriptlist=$(/usr/bin/python3 $apiclient /confluent-api/self/scriptlist/$1|sed -e 's/^- //') for script in $scriptlist; do source_remote $1/$script done unset confluentscripttmpdir } run_remote_parts() { confluentscripttmpdir=$(mktemp -d) apiclient=/opt/confluent/bin/apiclient if [ -f /etc/confluent/apiclient ]; then apiclient=/etc/confluent/apiclient fi scriptlist=$(/usr/bin/python3 $apiclient /confluent-api/self/scriptlist/$1|sed -e 's/^- //') for script in $scriptlist; do run_remote $1/$script done unset confluentscripttmpdir } run_remote_python() { echo echo '---------------------------------------------------------------------------' echo Running python script "'$*'" from https://$confluent_mgr/confluent-public/os/$confluent_profile/scripts/ tmpdir=$(mktemp -d) echo Executing in $tmpdir cd $tmpdir mkdir -p $(dirname $1) curl -f -sS https://$confluent_mgr/confluent-public/os/$confluent_profile/scripts/$1 > $1 if [ $? != 0 ]; then echo "'$*'" failed to download; return 1; fi python3 $* retcode=$? echo "'$*' exited with code $retcode" cd - > /dev/null return $retcode } run_remote_config() { echo set_confluent_vars apiclient=/opt/confluent/bin/apiclient if [ -f /etc/confluent/apiclient ]; then apiclient=/etc/confluent/apiclient fi echo '---------------------------------------------------------------------------' echo Requesting to run remote configuration for "'$*'" from $confluent_mgr under profile $confluent_profile python3 $apiclient /confluent-api/self/remoteconfig/"$*" -d {} python3 $apiclient /confluent-api/self/remoteconfig/status -w 204 echo echo 'Completed remote configuration' echo '---------------------------------------------------------------------------' return } #If invoked as a command, use the arguments to actually run a function (return 0 2>/dev/null) || $1 "${@:2}"