start-k3d.sh 1.29 KB
#!/bin/bash

set -xe

APP_DIR=""
BUILD_NAME=""
while [[ $# -gt 0 ]]; do
	case "$1" in
		(--app-dir)
			APP_DIR="$2"
			shift 2
			;;
		(--build-name)
			BUILD_NAME="$2"
			shift 2
			;;
		(*)
			break
	esac
done

if [[ -f $APP_DIR/.k3d.env ]]; then
	. $APP_DIR/.k3d.env
fi

[[ $APP_DIR ]] || { echo "Please pass --app-dir!" 1>&2; exit 1; }
[[ $BUILD_NAME ]] || { echo "Please configure --build-name!" 1>&2; exit 1; }
[[ -f $APP_DIR/k3d.conf ]] || { echo "No k3d.conf found in $APP_DIR!" 1>&2; exit 1; }

if ! k3d cluster list "${BUILD_NAME}" 1>/dev/null 2>/dev/null; then
	k3d cluster create -c "$APP_DIR/k3d.conf"  "${BUILD_NAME}"
fi
k3d kubeconfig merge "${BUILD_NAME}" --kubeconfig-merge-default --kubeconfig-switch-context

generate_coredns_custom() {
	search_domains="$(sed -n -e 's/^search //p' /etc/resolv.conf | tr ' ' '\n' | sed -e 's/\.$//')"
	nameserver_address="$(sed -n -e 's/^nameserver *//p' /etc/resolv.conf | head -n 1)"
	cat << _EOF_
apiVersion: v1
kind: ConfigMap
metadata:
  name: coredns-custom
  namespace: kube-system
data:
_EOF_
	for search_domain in $search_domains; do
		cat << _EOF_
  ${search_domain}.server: |
    ${search_domain}{
      forward . ${nameserver_address}
    }
_EOF_
	done
}

generate_coredns_custom | kubectl apply -f -
kubectl rollout restart deployment -n kube-system coredns