function set_confluent_vars() {
    if [ -z "$confluent_mgr" ]; then
        confluent_mgr=$(grep ^deploy_server: /etc/confluent/confluent.deploycfg | sed -e 's/[^ ]*: //')
    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)
    apiclient=/opt/confluent/bin/apiclient
    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/^- //')
    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/libexec/platform-python $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
    if [ -x /usr/libexec/platform-python ]; then
        /usr/libexec/platform-python $*
    else
        /usr/bin/python $*
    fi
    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
    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
    echo
    echo 'Completed remote configuration'
    echo '---------------------------------------------------------------------------'
    return
}