@echo " build-cov - coverage build of VPP and Docker images"
@echo " build-debug - build test infra (vpp debug image)"
@echo " build-go - just build golang files"
+ @echo " cluster-help - print info about KinD cluster setup (perf testing)"
@echo " master-cluster - setup KinD cluster for performance testing (master CalicoVPP + VPP)"
@echo " rebuild-master-cluster - rebuild VPP and update related pods without shutting down the cluster"
@echo " release-cluster - setup KinD cluster for performance testing (latest CalicoVPP release)"
build-msg:
@echo "Building VPP as '$(BUILD_AS)'"
@echo "****************************************************************"
- @echo "If you wish to build VPP as root, use 'SUDO_USER=root make ...'"
+ @echo "If you wish to build VPP as root, use 'make ... BUILD_AS=root'"
+ @echo "or"
+ @echo "'[sudo] SUDO_USER=root make ...'"
@echo "****************************************************************"
.PHONY: build-vpp-release
--ginkgo_timeout=$(GINKGO_TIMEOUT); \
./script/compress.sh $$?
+.PHONY: cluster-help
+cluster-help:
+ @bash ./kubernetes/setup-cluster.sh help
+
.PHONY: release-cluster
release-cluster: .kind_deps.ok
- @bash ./kubernetes/setupCluster.sh release-cluster
+ @bash ./kubernetes/setup-cluster.sh release-cluster
.PHONY: master-cluster
master-cluster: .kind_deps.ok
- @bash ./kubernetes/setupCluster.sh master-cluster
+ @bash ./kubernetes/setup-cluster.sh master-cluster
.PHONY: rebuild-master-cluster
-rebuild-cluster: .kind_deps.ok
- @bash ./kubernetes/setupCluster.sh rebuild-master-cluster
+rebuild-master-cluster: .kind_deps.ok
+ @bash ./kubernetes/setup-cluster.sh rebuild-master-cluster
# this is executed in a container by hs-test.sh
.PHONY: build-go
CALICOVPP_DIR="$HOME/vpp-dataplane"
VPP_DIR=$(pwd)
VPP_DIR=${VPP_DIR%extras*}
-STASH_SAVED=0
+COMMIT_HASH=$(git rev-parse HEAD)
+export DOCKER_BUILD_PROXY=$HTTP_PROXY
# ---------------- images ----------------
export CALICO_AGENT_IMAGE=localhost:5000/calicovpp/agent:latest
export CALICO_VPP_IMAGE=localhost:5000/calicovpp/vpp:latest
help() {
echo "Usage:"
- echo " make master-cluster | rebuild-master-cluster | release-cluster"
- echo "or"
- echo " ./kubernetes/setupCluster.sh [master-cluster | rebuild-master-cluster | release-cluster]"
- echo ""
+ echo -e " make master-cluster | rebuild-master-cluster | release-cluster\n"
+
echo "'master-cluster' pulls CalicoVPP and builds VPP from this directory, then brings up a KinD cluster."
echo "'rebuild-master-cluster' stops CalicoVPP pods, rebuilds VPP and restarts CalicoVPP pods. Cluster keeps running."
- echo "'release-cluster' starts up a KinD cluster and uses latest CalicoVPP release (e.g. v3.29)"
- echo ""
- echo "To shut down the cluster, use 'kind delete cluster'"
+ echo "'release-cluster' starts up a KinD cluster and uses latest CalicoVPP release (e.g. v3.29),
+ or you can override versions by using env variables 'CALICOVPP_VERSION' and 'TIGERA_VERSION':
+ CALICOVPP_VERSION: latest | v[x].[y].[z] (default=latest)
+ TIGERA_VERSION: master | v[x].[y].[z] (default=v3.28.3)"
+
+ echo -e "\nTo shut down the cluster, use 'kind delete cluster'"
+}
+
+cherry_pick() {
+ STASHED_CHANGES=0
+ echo "checkpoint: $COMMIT_HASH"
+ # chery-vpp hard resets the repo to a commit - we want to keep our changes
+ if ! git diff-index --quiet HEAD --; then
+ echo "Saving stash"
+ git stash save "HST: temp stash"
+ STASHED_CHANGES=1
+ fi
+ make -C $CALICOVPP_DIR cherry-vpp FORCE=y BASE=origin/master VPP_DIR=$VPP_DIR
+
+ # pop the stash to build VPP with CalicoVPP's patches + our changes
+ if [ $STASHED_CHANGES -eq 1 ]; then
+ git stash pop
+ fi
+}
+
+build_load_start_cni() {
+ make -C $VPP_DIR/extras/hs-test build-vpp-release
+ make -C $CALICOVPP_DIR dev-kind
+ make -C $CALICOVPP_DIR load-kind
+ $CALICOVPP_DIR/yaml/overlays/dev/kustomize.sh up
+}
+
+restore_repo() {
+ # stash changes, reset local repo to the original state and unstash changes (removes CalicoVPP's patches)
+ if ! git diff-index --quiet HEAD --; then
+ echo "Saving stash"
+ git stash save "HST: temp stash"
+ git reset --hard $COMMIT_HASH
+ git stash pop
+ else
+ git reset --hard $COMMIT_HASH
+ fi
}
setup_master() {
make -C $CALICOVPP_DIR kind-new-cluster N_KIND_WORKERS=2
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.28.3/manifests/tigera-operator.yaml
- make -C $CALICOVPP_DIR cherry-vpp FORCE=y BASE=origin/master VPP_DIR=$VPP_DIR
- make -C $VPP_DIR/extras/hs-test build-vpp-release
- make -C $CALICOVPP_DIR dev-kind
- make -C $CALICOVPP_DIR load-kind
- $CALICOVPP_DIR/yaml/overlays/dev/kustomize.sh up
- if ! git diff-index --quiet HEAD --; then
- echo "Saving stash"
- git stash save "HST: temp stash"
- git reset --hard origin/master
- git stash pop
- fi
+
+ cherry_pick
+ build_load_start_cni
+ restore_repo
}
rebuild_master() {
echo "Shutting down pods may take some time, timeout is set to 1m."
timeout 1m $CALICOVPP_DIR/yaml/overlays/dev/kustomize.sh dn || true
- make build-vpp-release
- make -C $CALICOVPP_DIR dev-kind
- make -C $CALICOVPP_DIR load-kind
- $CALICOVPP_DIR/yaml/overlays/dev/kustomize.sh up
+ cherry_pick
+ build_load_start_cni
+ restore_repo
}
setup_release() {
+ CALICOVPP_VERSION="${CALICOVPP_VERSION:-latest}"
+ TIGERA_VERSION="${TIGERA_VERSION:-v3.28.3}"
+ echo "CALICOVPP_VERSION=$CALICOVPP_VERSION"
+ echo "TIGERA_VERSION=$TIGERA_VERSION"
+ envsubst < kubernetes/calico-config-template.yaml > kubernetes/calico-config.yaml
+
kind create cluster --config kubernetes/kind-config.yaml
- kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.28.3/manifests/tigera-operator.yaml
+ kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/$TIGERA_VERSION/manifests/tigera-operator.yaml
- echo "Sleeping for 10s, waiting for tigera operator to start up."
- sleep 10
+ echo "Waiting for tigera-operator pod to start up."
+ kubectl -n tigera-operator wait --for=condition=Ready pod --all --timeout=1m
kubectl create -f https://raw.githubusercontent.com/projectcalico/vpp-dataplane/master/yaml/calico/installation-default.yaml
kubectl create -f kubernetes/calico-config.yaml