diff --git a/confluent_osdeploy/el7/profiles/default/scripts/functions b/confluent_osdeploy/el7/profiles/default/scripts/functions index 3fc93c4f..b1364bd0 100644 --- a/confluent_osdeploy/el7/profiles/default/scripts/functions +++ b/confluent_osdeploy/el7/profiles/default/scripts/functions @@ -1,10 +1,50 @@ #!/bin/bash +function test_mgr() { + if curl -s https://${1}/confluent-api/ > /dev/null; then + return 0 + fi + return 1 +} + +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 + 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/[^ ]*: //') @@ -24,7 +64,11 @@ fetch_remote() { source_remote_parts() { confluentscripttmpdir=$(mktemp -d) - scriptlist=$(/usr/libexec/platform-python /etc/confluent/apiclient /confluent-api/self/scriptlist/$1|sed -e 's/^- //') + 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 @@ -33,7 +77,11 @@ source_remote_parts() { run_remote_parts() { confluentscripttmpdir=$(mktemp -d) - scriptlist=$(/usr/libexec/platform-python /etc/confluent/apiclient /confluent-api/self/scriptlist/$1|sed -e 's/^- //') + 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 @@ -102,11 +150,7 @@ run_remote_python() { mkdir -p $(dirname $1) curl -f -sS $curlargs https://$confluent_mgr/confluent-public/os/$confluent_profile/scripts/$1 > $1 if [ $? != 0 ]; then echo "'$*'" failed to download; return 1; fi - if [ -x /usr/libexec/platform-python ]; then - /usr/libexec/platform-python $* - else - /usr/bin/python $* - fi + confluentpython $* retcode=$? echo "'$*' exited with code $retcode" cd - > /dev/null @@ -122,18 +166,12 @@ run_remote_config() { fi echo '---------------------------------------------------------------------------' echo Requesting to run remote configuration for "'$*'" from $confluent_mgr under profile $confluent_profile - if [ -x /usr/libexec/platform-python ]; then - /usr/libexec/platform-python $apiclient /confluent-api/self/remoteconfig/"$*" -d {} - /usr/libexec/platform-python $apiclient /confluent-api/self/remoteconfig/status -w 204 - else - /usr/bin/python $apiclient /confluent-api/self/remoteconfig/"$*" -d {} - /usr/bin/python $apiclient /confluent-api/self/remoteconfig/status -w 204 - fi + 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}" \ No newline at end of file +(return 0 2>/dev/null) || $1 "${@:2}" diff --git a/confluent_osdeploy/genesis/profiles/default/scripts/functions b/confluent_osdeploy/genesis/profiles/default/scripts/functions index 3f305fc0..b1364bd0 100644 --- a/confluent_osdeploy/genesis/profiles/default/scripts/functions +++ b/confluent_osdeploy/genesis/profiles/default/scripts/functions @@ -6,6 +6,18 @@ function test_mgr() { return 1 } +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}') @@ -40,28 +52,74 @@ function set_confluent_vars() { } fetch_remote() { - if [ -f /etc/confluent/ca.pem ]; then - curlargs=" --cacert /etc/confluent/ca.pem" - fi - set_confluent_vars - curl -f -sS $curlargs https://$confluent_mgr/confluent-public/os/$confluent_profile/scripts/$1 > $1 - if [ $? != 0 ]; then echo $1 failed to download; return 1; fi -} - -run_remote() { - requestedcmd="'$*'" curlargs="" if [ -f /etc/confluent/ca.pem ]; then curlargs=" --cacert /etc/confluent/ca.pem" fi set_confluent_vars + mkdir -p $(dirname $1) + curl -f -sS $curlargs https://$confluent_mgr/confluent-public/os/$confluent_profile/scripts/$1 > $1 + if [ $? != 0 ]; then echo $1 failed to download; return 1; fi +} + +source_remote_parts() { + confluentscripttmpdir=$(mktemp -d) + 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 + 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=$(confluentpython $apiclient /confluent-api/self/scriptlist/$1|sed -e 's/^- //') + for script in $scriptlist; do + run_remote $1/$script + done + unset confluentscripttmpdir +} + +source_remote() { + set_confluent_vars + echo + echo '---------------------------------------------------------------------------' + echo Sourcing $1 from https://$confluent_mgr/confluent-public/os/$confluent_profile/scripts/ + if [ -z "$confluentscripttmpdir" ]; then + confluentscripttmpdir=$(mktemp -d) + 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 + return $retcode +} + +run_remote() { + requestedcmd="'$*'" + set_confluent_vars echo echo '---------------------------------------------------------------------------' echo Running $requestedcmd from https://$confluent_mgr/confluent-public/os/$confluent_profile/scripts/ - tmpdir=$(mktemp -d) - echo Executing in $tmpdir - cd $tmpdir - curl -f -sS $curlargs https://$confluent_mgr/confluent-public/os/$confluent_profile/scripts/$1 > $1 + if [ -z "$confluentscripttmpdir" ]; then + confluentscripttmpdir=$(mktemp -d) + 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 @@ -71,7 +129,9 @@ run_remote() { shift ./$cmd $* retcode=$? - echo "$requestedcmd exited with code $retcode" + if [ $retcode -ne 0 ]; then + echo "$requestedcmd exited with code $retcode" + fi cd - > /dev/null return $retcode } @@ -87,9 +147,10 @@ run_remote_python() { tmpdir=$(mktemp -d) echo Executing in $tmpdir cd $tmpdir + mkdir -p $(dirname $1) curl -f -sS $curlargs https://$confluent_mgr/confluent-public/os/$confluent_profile/scripts/$1 > $1 if [ $? != 0 ]; then echo "'$*'" failed to download; return 1; fi - /usr/libexec/platform-python $* + confluentpython $* retcode=$? echo "'$*' exited with code $retcode" cd - > /dev/null @@ -105,13 +166,12 @@ run_remote_config() { fi echo '---------------------------------------------------------------------------' echo Requesting to run remote configuration for "'$*'" from $confluent_mgr under profile $confluent_profile - /usr/libexec/platform-python $apiclient /confluent-api/self/remoteconfig/"$*" -d {} - /usr/libexec/platform-python $apiclient /confluent-api/self/remoteconfig/status -w 204 + 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}" \ No newline at end of file +(return 0 2>/dev/null) || $1 "${@:2}" diff --git a/confluent_osdeploy/suse15-diskless/profiles/default/scripts/functions b/confluent_osdeploy/suse15-diskless/profiles/default/scripts/functions index 670ae9b8..b1364bd0 100644 --- a/confluent_osdeploy/suse15-diskless/profiles/default/scripts/functions +++ b/confluent_osdeploy/suse15-diskless/profiles/default/scripts/functions @@ -6,6 +6,18 @@ function test_mgr() { return 1 } +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}') @@ -56,7 +68,7 @@ source_remote_parts() { if [ -f /etc/confluent/apiclient ]; then apiclient=/etc/confluent/apiclient fi - scriptlist=$(/usr/libexec/platform-python $apiclient /confluent-api/self/scriptlist/$1|sed -e 's/^- //') + scriptlist=$(confluentpython $apiclient /confluent-api/self/scriptlist/$1|sed -e 's/^- //') for script in $scriptlist; do source_remote $1/$script done @@ -69,7 +81,7 @@ run_remote_parts() { if [ -f /etc/confluent/apiclient ]; then apiclient=/etc/confluent/apiclient fi - scriptlist=$(/usr/libexec/platform-python $apiclient /confluent-api/self/scriptlist/$1|sed -e 's/^- //') + scriptlist=$(confluentpython $apiclient /confluent-api/self/scriptlist/$1|sed -e 's/^- //') for script in $scriptlist; do run_remote $1/$script done @@ -138,11 +150,7 @@ run_remote_python() { mkdir -p $(dirname $1) curl -f -sS $curlargs https://$confluent_mgr/confluent-public/os/$confluent_profile/scripts/$1 > $1 if [ $? != 0 ]; then echo "'$*'" failed to download; return 1; fi - if [ -x /usr/libexec/platform-python ]; then - /usr/libexec/platform-python $* - else - /usr/bin/python $* - fi + confluentpython $* retcode=$? echo "'$*' exited with code $retcode" cd - > /dev/null @@ -158,18 +166,12 @@ run_remote_config() { fi echo '---------------------------------------------------------------------------' echo Requesting to run remote configuration for "'$*'" from $confluent_mgr under profile $confluent_profile - if [ -x /usr/libexec/platform-python ]; then - /usr/libexec/platform-python $apiclient /confluent-api/self/remoteconfig/"$*" -d {} - /usr/libexec/platform-python $apiclient /confluent-api/self/remoteconfig/status -w 204 - else - /usr/bin/python $apiclient /confluent-api/self/remoteconfig/"$*" -d {} - /usr/bin/python $apiclient /confluent-api/self/remoteconfig/status -w 204 - fi + 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}" \ No newline at end of file +(return 0 2>/dev/null) || $1 "${@:2}" diff --git a/confluent_osdeploy/ubuntu20.04/profiles/default/scripts/functions b/confluent_osdeploy/ubuntu20.04/profiles/default/scripts/functions index 71f9f93d..b1364bd0 100644 --- a/confluent_osdeploy/ubuntu20.04/profiles/default/scripts/functions +++ b/confluent_osdeploy/ubuntu20.04/profiles/default/scripts/functions @@ -6,6 +6,18 @@ function test_mgr() { return 1 } +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}') @@ -40,6 +52,7 @@ function set_confluent_vars() { } fetch_remote() { + curlargs="" if [ -f /etc/confluent/ca.pem ]; then curlargs=" --cacert /etc/confluent/ca.pem" fi @@ -49,38 +62,76 @@ fetch_remote() { if [ $? != 0 ]; then echo $1 failed to download; return 1; fi } +source_remote_parts() { + confluentscripttmpdir=$(mktemp -d) + 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 + unset confluentscripttmpdir +} + run_remote_parts() { - scriptlist=$(python3 /etc/confluent/apiclient /confluent-api/self/scriptlist/$1|sed -e 's/^- //') + confluentscripttmpdir=$(mktemp -d) + 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 + unset confluentscripttmpdir +} + +source_remote() { + set_confluent_vars + echo + echo '---------------------------------------------------------------------------' + echo Sourcing $1 from https://$confluent_mgr/confluent-public/os/$confluent_profile/scripts/ + if [ -z "$confluentscripttmpdir" ]; then + confluentscripttmpdir=$(mktemp -d) + 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 + return $retcode } run_remote() { requestedcmd="'$*'" - curlargs="" - if [ -f /etc/confluent/ca.pem ]; then - curlargs=" --cacert /etc/confluent/ca.pem" - fi set_confluent_vars 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 $curlargs https://$confluent_mgr/confluent-public/os/$confluent_profile/scripts/$1 > $1 + if [ -z "$confluentscripttmpdir" ]; then + confluentscripttmpdir=$(mktemp -d) + 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 + if [ -x /usr/bin/chcon ]; then + chcon system_u:object_r:bin_t:s0 $cmd + fi shift ./$cmd $* retcode=$? - echo "$requestedcmd exited with code $retcode" + if [ $retcode -ne 0 ]; then + echo "$requestedcmd exited with code $retcode" + fi cd - > /dev/null return $retcode } @@ -99,7 +150,7 @@ run_remote_python() { mkdir -p $(dirname $1) curl -f -sS $curlargs https://$confluent_mgr/confluent-public/os/$confluent_profile/scripts/$1 > $1 if [ $? != 0 ]; then echo "'$*'" failed to download; return 1; fi - python3 $* + confluentpython $* retcode=$? echo "'$*' exited with code $retcode" cd - > /dev/null @@ -115,13 +166,12 @@ run_remote_config() { 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 + 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}" \ No newline at end of file +(return 0 2>/dev/null) || $1 "${@:2}"