mirror of
https://github.com/xcat2/confluent.git
synced 2025-01-15 12:17:47 +00:00
172008f942
At first glance, there should be similarities, apart from python differences and need for different clortho build due to library mismatch.
170 lines
5.6 KiB
Bash
170 lines
5.6 KiB
Bash
#!/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/[^ ]*: //')
|
|
fi
|
|
}
|
|
|
|
fetch_remote() {
|
|
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)
|
|
scriptlist=$(confluentpython /etc/confluent/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)
|
|
scriptlist=$(confluentpython /etc/confluent/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/
|
|
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
|
|
shift
|
|
./$cmd $*
|
|
retcode=$?
|
|
if [ $retcode -ne 0 ]; then
|
|
echo "$requestedcmd exited with code $retcode"
|
|
fi
|
|
cd - > /dev/null
|
|
return $retcode
|
|
}
|
|
|
|
run_remote_python() {
|
|
echo
|
|
set_confluent_vars
|
|
if [ -f /etc/confluent/ca.pem ]; then
|
|
curlargs=" --cacert /etc/confluent/ca.pem"
|
|
fi
|
|
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 $curlargs https://$confluent_mgr/confluent-public/os/$confluent_profile/scripts/$1 > $1
|
|
if [ $? != 0 ]; then echo "'$*'" failed to download; return 1; fi
|
|
confluentpython $*
|
|
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
|
|
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}"
|