Newer
Older
openstack-caracal-ipv4 / tests / phase-07-conductor-graft / fakebin / juju
#!/usr/bin/env bash
# fake juju for phase-07-conductor-graft.sh tests.
# Logs every call to $JUJU_LOG; keeps decoded-file state in $JUJU_STATE so the
# 7.2 sha256 both-sides gate passes legitimately. Dispatches `juju ssh` remote
# commands by substring. Steered by env:
#   DOMAIN_SETUP_FAIL TCP_FAIL SHA_MISMATCH DRIVER_MISSING NOTACTIVE
#   SHOWARGS_NODIR PS_NODIR NODRIVER_ENABLED
: "${JUJU_LOG:=/dev/null}"
: "${JUJU_STATE:=/tmp}"
printf 'juju %s\n' "$*" >> "$JUJU_LOG"

sub="${1:-}"; shift || true

if [ "$sub" = "run" ]; then
  # juju run magnum/leader domain-setup
  [ "${DOMAIN_SETUP_FAIL:-0}" = 1 ] && exit 1
  echo "Running domain-setup on magnum/leader"; exit 0
fi

if [ "$sub" != "ssh" ]; then exit 0; fi

# strip: -m MODEL UNIT ; the remainder is the remote command (1+ args)
while [ "${1:-}" = "-m" ]; do shift 2; done
shift || true          # drop the UNIT
REMOTE="$*"

emit_kubeconfig_sha() {
  if [ "${SHA_MISMATCH:-0}" = 1 ]; then
    echo "0000000000000000000000000000000000000000000000000000000000000000  /etc/magnum/kubeconfig"
  elif [ -f "$JUJU_STATE/kubeconfig" ]; then
    sha256sum "$JUJU_STATE/kubeconfig" | awk '{print $1"  /etc/magnum/kubeconfig"}'
  else
    echo "(no kubeconfig)"; return 1
  fi
}

case "$REMOTE" in
  *"base64 -d > /etc/magnum/kubeconfig"*)     # 7.2 write -- stdin is base64 payload (must precede the getent match)
    base64 -d > "$JUJU_STATE/kubeconfig" 2>/dev/null || true; exit 0 ;;
  *"echo TCP-OK"*)
    if [ "${TCP_FAIL:-0}" = 1 ]; then echo "TCP-FAIL"; else echo "TCP-OK"; fi ;;
  *"systemctl show magnum-conductor -p User"*)
    echo "magnum" ;;
  *"[m]agnum-conductor"*)          # ps fallback owner probe
    echo "magnum" ;;
  *"getent passwd magnum"*)
    exit 0 ;;
  *"sha256sum /etc/magnum/kubeconfig"*)
    emit_kubeconfig_sha ;;
  *"curl "*pypi*|*"pypi:"*)
    echo "pypi:200"; echo "helm:200" ;;
  *"WANT="*"get.helm.sh"*)          # helm install block
    echo "[OK] installed v3.17.3+ge4da497" ;;
  *"command -v helm"*)              # restricted-PATH gate
    echo "/usr/bin/helm"; echo "v3.17.3+ge4da497" ;;
  *"pip install"*"magnum-capi-helm"*)
    echo "Successfully installed magnum-capi-helm-1.4.0" ;;
  *"pip show magnum-capi-helm"*)
    echo "Version: 1.4.0" ;;
  *"entry_points"*)
    if [ "${DRIVER_MISSING:-0}" = 1 ]; then echo "['k8s_fedora_coreos_v1']"; else echo "['k8s_capi_helm_v1', 'k8s_fedora_coreos_v1']"; fi ;;
  *"helm --kubeconfig /etc/magnum/kubeconfig list -A"*)   # auth proof
    echo "NAME          NAMESPACE     REVISION  STATUS    CHART"
    echo "cert-manager  cert-manager  1         deployed  cert-manager-v1.20.2"
    echo "ck-network    kube-system   1         deployed  cilium-1.17.12" ;;
  *"install -d"*"magnum.conf.d"*)
    mkdir -p "$JUJU_STATE/conf.d"; exit 0 ;;
  *"tee /etc/magnum/magnum.conf.d/00-capi-helm.conf"*)    # 7.6 write -- stdin payload
    mkdir -p "$JUJU_STATE/conf.d"; cat > "$JUJU_STATE/conf.d/00-capi-helm.conf"; exit 0 ;;
  *"chmod 0644 /etc/magnum/magnum.conf.d/00-capi-helm.conf"*)
    exit 0 ;;
  *"grep -q '^default_helm_chart_version = "*)
    grep -q '^default_helm_chart_version = 0.25.1$' "$JUJU_STATE/conf.d/00-capi-helm.conf"; exit $? ;;
  *"grep -nP '[^\\x00-\\x7F]' /etc/magnum/magnum.conf.d/00-capi-helm.conf"*)
    LC_ALL=C grep -nP '[^\x00-\x7F]' "$JUJU_STATE/conf.d/00-capi-helm.conf"; exit $? ;;   # empty -> exit 1 (no non-ascii)
  *"tee /etc/default/magnum-conductor"*)
    cat > "$JUJU_STATE/default-conductor"; exit 0 ;;
  *"show-args"*)
    if [ "${SHOWARGS_NODIR:-0}" = 1 ]; then
      echo "/usr/bin/magnum-conductor --config-file=/etc/magnum/magnum.conf --log-file=/var/log/magnum/magnum-conductor.log"
    else
      echo "/usr/bin/magnum-conductor --config-file=/etc/magnum/magnum.conf --config-dir /etc/magnum/magnum.conf.d --log-file=/var/log/magnum/magnum-conductor.log"
    fi ;;
  *"sudo bash -s"*)                 # 7.7b heredoc -- consume + simulate success
    cat >/dev/null; exit 0 ;;
  *"grep -c '^auth_version = v3"*)
    echo "2" ;;
  *"grep -c -- '--config-dir /etc/magnum/magnum.conf.d' /etc/default/magnum-api"*)
    echo "1" ;;
  *"systemctl restart magnum-conductor magnum-api"*)
    if [ "${NOTACTIVE:-0}" = 1 ]; then echo "active"; echo "failed"; else echo "active"; echo "active"; fi ;;
  *"ps -ww -C magnum-conductor"*|*"ps -ww -C magnum-api"*)
    if [ "${PS_NODIR:-0}" = 1 ]; then
      echo "/usr/bin/python3 /usr/bin/magnum-x --config-file=/etc/magnum/magnum.conf --log-file=/var/log/magnum/x.log"
    else
      echo "/usr/bin/python3 /usr/bin/magnum-x --config-file=/etc/magnum/magnum.conf --config-dir /etc/magnum/magnum.conf.d --log-file=/var/log/magnum/x.log"
    fi ;;
  *"magnum-driver-manage list-drivers"*)
    if [ "${NODRIVER_ENABLED:-0}" = 1 ]; then echo "| k8s_fedora_coreos_v1 |"; else echo "| k8s_capi_helm_v1 |"; echo "| k8s_fedora_coreos_v1 |"; fi ;;
  *)
    exit 0 ;;
esac
exit 0