cloudfoundry/cf-k8s-controllers

View on GitHub
scripts/installer/run-locally.sh

Summary

Maintainability
Test Coverage
#!/usr/bin/env bash

set -euo pipefail

ROOT_DIR="$(cd "$(dirname "$0")/../.." && pwd)"
SCRIPT_DIR="${ROOT_DIR}/scripts"

CLUSTER_NAME="installer"

JOB_DEFINITION="$(mktemp)"
HELM_CHART_SOURCE="$ROOT_DIR/helm_chart_source"
mkdir -p "$HELM_CHART_SOURCE"
trap "rm -rf $HELM_CHART_SOURCE $JOB_DEFINITION" EXIT

# workaround for https://github.com/carvel-dev/kbld/issues/213
# kbld fails with git error messages in languages than other english
export LC_ALL=en_US.UTF-8

function install_yq() {
  GOBIN="${ROOT_DIR}/bin" go install github.com/mikefarah/yq/v4@latest
  YQ="${ROOT_DIR}/bin/yq"
}

function ensure_kind_cluster() {
  kind delete cluster --name "$CLUSTER_NAME"
  kind create cluster --name "$CLUSTER_NAME" --wait 5m --config="$SCRIPT_DIR/assets/kind-config.yaml"

  kind export kubeconfig --name "$CLUSTER_NAME"
}

function clone_helm_chart() {
  echo "Cloning helm chart in $HELM_CHART_SOURCE"
  cp -a "$ROOT_DIR"/helm/korifi/* "$HELM_CHART_SOURCE"
}

function build_korifi() {
  pushd "${ROOT_DIR}" >/dev/null
  {
    echo "Building korifi values file..."

    make generate manifests

    local kbld_file values_file
    kbld_file="$SCRIPT_DIR/assets/korifi-kbld.yml"
    values_file="$HELM_CHART_SOURCE/values.yaml"

    "$YQ" "with(.sources[]; .docker.buildx.rawOptions += [\"--build-arg\", \"version=dev\"])" $kbld_file |
      kbld \
        --images-annotation=false \
        -f "${ROOT_DIR}/helm/korifi/values.yaml" \
        -f - >"$values_file"

    awk '/image:/ {print $2}' "$values_file" | while read -r img; do
      kind load docker-image --name "$CLUSTER_NAME" "$img"
    done
  }
  popd >/dev/null
}

run_installer() {
  pushd "${ROOT_DIR}" >/dev/null
  {
    local kbld_file
    kbld_file="$SCRIPT_DIR/installer/kbld.yaml"

    "$YQ" "with(.sources[]; .docker.buildx.rawOptions += [\"--build-arg\", \"HELM_CHART_SOURCE=helm_chart_source\"])" $kbld_file |
      kbld \
        --images-annotation=false \
        -f "${ROOT_DIR}/scripts/installer/install-korifi-kind.yaml" \
        -f - >"$JOB_DEFINITION"

    awk '/image:/ {print $2}' "$JOB_DEFINITION" | xargs kind load docker-image --name "$CLUSTER_NAME"

    kubectl apply -f "$JOB_DEFINITION"
    kubectl wait -n korifi-installer --for=condition=ready pod -l job-name=install-korifi
    kubectl logs -n korifi-installer -l job-name=install-korifi -f
  }
  popd >/dev/null
}

function main() {
  install_yq
  ensure_kind_cluster
  clone_helm_chart
  build_korifi
  run_installer
}

main "$@"