#!/bin/bash function confluentpython() { if [ -x /usr/libexec/platform-python ]; then /usr/libexec/platform-python $* elif [ -x /usr/bin/python3 ]; then /usr/bin/python3 $* elif [ -x /usr/bin/python ]; then /usr/bin/python $* elif [ -x /usr/bin/python2 ]; then /usr/bin/python2 $* fi } function set_confluent_vars() { if [ -z "$nodename" ]; then nodename=$(grep ^NODENAME: /etc/confluent/confluent.info | awk '{print $2}') fi confluent_mgr=$(confluentpython /opt/confluent/bin/apiclient -c) if [[ "$confluent_mgr" = *":"* ]]; then confluent_mgr="[$confluent_mgr]" fi if [ -z "$confluent_profile" ]; then confluent_profile=$(grep ^profile: /etc/confluent/confluent.deploycfg | sed -e 's/[^ ]*: //') fi } fetch_remote() { set_confluent_vars apiclient=/opt/confluent/bin/apiclient if [ -f /etc/confluent/apiclient ]; then apiclient=/etc/confluent/apiclient fi mkdir -p $(dirname $1) confluentpython $apiclient /confluent-public/os/$confluent_profile/scripts/$1 -o $1 if [ $? != 0 ]; then echo $1 failed to download; return 1; fi } source_remote_parts() { confluentscripttmpdir=$(mktemp -d /tmp/confluentscripts.XXXXXXXXX) apiclient=/opt/confluent/bin/apiclient if [ -f /etc/confluent/apiclient ]; then apiclient=/etc/confluent/apiclient fi scriptlist=$(confluentpython $apiclient /confluent-api/self/scriptlist/$1|sed -e 's/^- //') for script in $scriptlist; do source_remote $1/$script done rm -rf $confluentscripttmpdir unset confluentscripttmpdir } run_remote_parts() { confluentscripttmpdir=$(mktemp -d /tmp/confluentscripts.XXXXXXXXX) apiclient=/opt/confluent/bin/apiclient if [ -f /etc/confluent/apiclient ]; then apiclient=/etc/confluent/apiclient fi scriptlist=$(confluentpython $apiclient /confluent-api/self/scriptlist/$1|sed -e 's/^- //') for script in $scriptlist; do run_remote $1/$script done rm -rf $confluentscripttmpdir unset confluentscripttmpdir } source_remote() { set_confluent_vars unsettmpdir=0 echo echo '---------------------------------------------------------------------------' echo Sourcing $1 from https://$confluent_mgr/confluent-public/os/$confluent_profile/scripts/ if [ -z "$confluentscripttmpdir" ]; then confluentscripttmpdir=$(mktemp -d /tmp/confluentscripts.XXXXXXXXX) unsettmpdir=1 fi echo Sourcing from $confluentscripttmpdir cd $confluentscripttmpdir fetch_remote $1 if [ $? != 0 ]; then echo $1 failed to download; return 1; fi chmod +x $1 cmd=$1 shift source ./$cmd cd - > /dev/null if [ "$unsettmpdir" = 1 ]; then rm -rf $confluentscripttmpdir unset confluentscripttmpdir unsettmpdir=0 fi rm -rf $confluentscripttmpdir return $retcode } run_remote() { requestedcmd="'$*'" unsettmpdir=0 set_confluent_vars echo echo '---------------------------------------------------------------------------' echo Running $requestedcmd from https://$confluent_mgr/confluent-public/os/$confluent_profile/scripts/ if [ -z "$confluentscripttmpdir" ]; then confluentscripttmpdir=$(mktemp -d /tmp/confluentscripts.XXXXXXXXX) unsettmpdir=1 fi echo Executing in $confluentscripttmpdir cd $confluentscripttmpdir fetch_remote $1 if [ $? != 0 ]; then echo $requestedcmd failed to download; return 1; fi chmod +x $1 cmd=$1 if [ -x /usr/bin/chcon ]; then chcon system_u:object_r:bin_t:s0 $cmd fi shift ./$cmd $* retcode=$? if [ $retcode -ne 0 ]; then echo "$requestedcmd exited with code $retcode" fi cd - > /dev/null if [ "$unsettmpdir" = 1 ]; then rm -rf $confluentscripttmpdir unset confluentscripttmpdir unsettmpdir=0 fi return $retcode } run_remote_python() { echo set_confluent_vars echo '---------------------------------------------------------------------------' echo Running python script "'$*'" from https://$confluent_mgr/confluent-public/os/$confluent_profile/scripts/ confluentscripttmpdir=$(mktemp -d /tmp/confluentscripts.XXXXXXXXX) echo Executing in $confluentscripttmpdir cd $confluentscripttmpdir mkdir -p $(dirname $1) confluentpython /opt/confluent/bin/apiclient /confluent-public/os/$confluent_profile/scripts/$1 -o $1 if [ $? != 0 ]; then echo "'$*'" failed to download; return 1; fi confluentpython $* retcode=$? echo "'$*' exited with code $retcode" cd - > /dev/null rm -rf $confluentscripttmpdir unset confluentscripttmpdir 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 confluentpython $apiclient /confluent-api/self/remoteconfig/"$*" -d {} confluentpython $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}"