From ddc233f946f0a0a1b7df82378fd531c0903310f2 Mon Sep 17 00:00:00 2001 From: Pablo Garcia Miranda Date: Mon, 28 Apr 2025 13:36:43 +0200 Subject: [PATCH 01/12] Adapting deploy-netbox.sh to a vCluster deployment --- kind/deploy-netbox.sh | 98 ++++++++++++++++++++++++++++--------------- 1 file changed, 65 insertions(+), 33 deletions(-) diff --git a/kind/deploy-netbox.sh b/kind/deploy-netbox.sh index e2ef7423..76a4da81 100755 --- a/kind/deploy-netbox.sh +++ b/kind/deploy-netbox.sh @@ -3,14 +3,24 @@ set -e -u -o pipefail NETBOX_HELM_CHART="https://github.com/netbox-community/netbox-chart/releases/download/netbox-5.0.0-beta.169/netbox-5.0.0-beta.169.tgz" # default value -if [[ $# -ne 3 ]]; then - echo "Usage: $0 " +if [[ $# -lt 3 || $# -gt 4 ]]; then + echo "Usage: $0 [--vcluster]" exit 1 fi CLUSTER=$1 VERSION=$2 NAMESPACE=$3 +VCLUSTER_MODE=${4:-} + +# Choose kubectl and helm commands depending if we run on vCluster +if [[ "$VCLUSTER_MODE" == "--vcluster" ]]; then + KUBECTL="vcluster connect ${CLUSTER} -n ${NAMESPACE} -- kubectl" + HELM="vcluster connect ${CLUSTER} -n ${NAMESPACE} -- helm" +else + KUBECTL="kubectl" + HELM="helm" +fi # load remote images if [[ "${VERSION}" == "3.7.8" ]] ;then @@ -66,35 +76,57 @@ else exit 1 fi -for img in "${Remote_Images[@]}"; do - docker pull "$img" - kind load docker-image "$img" --name "${CLUSTER}" -done +if [[ "$VCLUSTER_MODE" == "--vcluster" ]]; then + echo "[Running in vCluster mode] skipping docker pull and kind load for remote images." +else + echo "[Running in Kind mode] pulling and loading remote images into kind cluster..." + for img in "${Remote_Images[@]}"; do + docker pull "$img" + kind load docker-image "$img" --name "${CLUSTER}" + done +fi # build image for loading local data via NetBox API -cd ./kind/load-data-job && docker build -t netbox-load-local-data:1.0 --load --no-cache --progress=plain -f ./dockerfile . && cd - - -# load local images -declare -a Local_Images=( \ -"netbox-load-local-data:1.0" \ -) -for img in "${Local_Images[@]}"; do - kind load docker-image "$img" --name "${CLUSTER}" -done - -# install helm charts -helm upgrade --install --namespace="${NAMESPACE}" postgres-operator \ -https://opensource.zalando.com/postgres-operator/charts/postgres-operator/postgres-operator-1.12.2.tgz - -kubectl apply --namespace="${NAMESPACE}" -f "$(dirname "$0")/netbox-db.yaml" -kubectl wait --namespace="${NAMESPACE}" --timeout=600s --for=jsonpath='{.status.PostgresClusterStatus}'=Running postgresql/netbox-db - -kubectl create configmap --namespace="${NAMESPACE}" netbox-demo-data-load-job-scripts --from-file="$(dirname "$0")/load-data-job" -o yaml --dry-run=client | kubectl apply -f - -kubectl apply --namespace="${NAMESPACE}" -f "$(dirname "$0")/load-data-job.yaml" -kubectl wait --namespace="${NAMESPACE}" --timeout=600s --for=condition=complete job/netbox-demo-data-load-job -kubectl delete configmap --namespace="${NAMESPACE}" netbox-demo-data-load-job-scripts +cd ./kind/load-data-job +docker build -t netbox-load-local-data:1.0 --load --no-cache --progress=plain -f ./dockerfile . +cd - + +# Load local images into Kind only if not vCluster +if [[ "$VCLUSTER_MODE" != "--vcluster" ]]; then + echo "Loading local images into kind cluster..." + declare -a Local_Images=( \ + "netbox-load-local-data:1.0" \ + ) + for img in "${Local_Images[@]}"; do + kind load docker-image "$img" --name "${CLUSTER}" + done +else + echo "Skipping local image loading into Kind (vCluster mode)." +fi -helm upgrade --install --namespace="${NAMESPACE}" netbox \ +# Install Postgres Operator +${HELM} upgrade --install postgres-operator \ + --namespace="${NAMESPACE}" \ + --create-namespace \ + --set podPriorityClassName.create=false \ + --set podServiceAccount.name="postgres-pod-${NAMESPACE}" \ + --set serviceAccount.name="postgres-operator-${NAMESPACE}" \ + https://opensource.zalando.com/postgres-operator/charts/postgres-operator/postgres-operator-1.12.2.tgz + +# Deploy the database +${KUBECTL} apply --namespace="${NAMESPACE}" -f "$(dirname "$0")/netbox-db.yaml" +${KUBECTL} wait --namespace="${NAMESPACE}" --timeout=600s --for=jsonpath='{.status.PostgresClusterStatus}'=Running postgresql/netbox-db + +# Load demo data +${KUBECTL} create configmap --namespace="${NAMESPACE}" netbox-demo-data-load-job-scripts --from-file="$(dirname "$0")/load-data-job" -o yaml --dry-run=client | ${KUBECTL} apply -f - +${KUBECTL} apply --namespace="${NAMESPACE}" -f "$(dirname "$0")/load-data-job.yaml" +${KUBECTL} wait --namespace="${NAMESPACE}" --timeout=600s --for=condition=complete job/netbox-demo-data-load-job +${KUBECTL} delete configmap --namespace="${NAMESPACE}" netbox-demo-data-load-job-scripts + +# Install NetBox +${HELM} upgrade --install netbox \ + --namespace="${NAMESPACE}" \ + --create-namespace \ --set postgresql.enabled="false" \ --set externalDatabase.host="netbox-db.${NAMESPACE}.svc.cluster.local" \ --set externalDatabase.existingSecretName="netbox.netbox-db.credentials.postgresql.acid.zalan.do" \ @@ -106,12 +138,12 @@ helm upgrade --install --namespace="${NAMESPACE}" netbox \ --set resources.limits.memory="2Gi" \ ${NETBOX_HELM_CHART} -kubectl rollout status --namespace="${NAMESPACE}" deployment netbox +${KUBECTL} rollout status --namespace="${NAMESPACE}" deployment netbox -# load local data -kubectl create job netbox-load-local-data --image=netbox-load-local-data:1.0 -kubectl wait --namespace="${NAMESPACE}" --timeout=600s --for=condition=complete job/netbox-load-local-data -docker rmi netbox-load-local-data:1.0 +# Load local data +${KUBECTL} delete job netbox-load-local-data --namespace="${NAMESPACE}" --ignore-not-found +${KUBECTL} create job netbox-load-local-data --namespace="${NAMESPACE}" --image=netbox-load-local-data:1.0 +${KUBECTL} wait --namespace="${NAMESPACE}" --timeout=600s --for=condition=complete job/netbox-load-local-data # clean up rm $(dirname "$0")/load-data-job/load-data.sh From 6a998ec26baf9ad02d1afe3df63656bfe329e523 Mon Sep 17 00:00:00 2001 From: Pablo Garcia Miranda Date: Mon, 28 Apr 2025 17:32:42 +0200 Subject: [PATCH 02/12] Debugging demo data --- kind/deploy-netbox.sh | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/kind/deploy-netbox.sh b/kind/deploy-netbox.sh index 76a4da81..a10f9b58 100755 --- a/kind/deploy-netbox.sh +++ b/kind/deploy-netbox.sh @@ -78,6 +78,7 @@ fi if [[ "$VCLUSTER_MODE" == "--vcluster" ]]; then echo "[Running in vCluster mode] skipping docker pull and kind load for remote images." + sleep 15 else echo "[Running in Kind mode] pulling and loading remote images into kind cluster..." for img in "${Remote_Images[@]}"; do @@ -87,7 +88,7 @@ else fi # build image for loading local data via NetBox API -cd ./kind/load-data-job +cd "$(dirname "$0")/load-data-job" docker build -t netbox-load-local-data:1.0 --load --no-cache --progress=plain -f ./dockerfile . cd - @@ -118,10 +119,26 @@ ${KUBECTL} apply --namespace="${NAMESPACE}" -f "$(dirname "$0")/netbox-db.yaml" ${KUBECTL} wait --namespace="${NAMESPACE}" --timeout=600s --for=jsonpath='{.status.PostgresClusterStatus}'=Running postgresql/netbox-db # Load demo data -${KUBECTL} create configmap --namespace="${NAMESPACE}" netbox-demo-data-load-job-scripts --from-file="$(dirname "$0")/load-data-job" -o yaml --dry-run=client | ${KUBECTL} apply -f - -${KUBECTL} apply --namespace="${NAMESPACE}" -f "$(dirname "$0")/load-data-job.yaml" -${KUBECTL} wait --namespace="${NAMESPACE}" --timeout=600s --for=condition=complete job/netbox-demo-data-load-job -${KUBECTL} delete configmap --namespace="${NAMESPACE}" netbox-demo-data-load-job-scripts +if [[ -d "$(dirname "$0")/load-data-job" ]]; then + echo "load-data-job directory found, creating ConfigMap." + + echo "Generating ConfigMap YAML:" + ${KUBECTL} create configmap --namespace="${NAMESPACE}" netbox-demo-data-load-job-scripts --from-file="/tmp/netbox-operator/kind/load-data-job" -o yaml --dry-run=client | ${KUBECTL} apply -f - + + echo "Applying ConfigMap to Kubernetes:" + ${KUBECTL} apply -f /tmp/netbox-configmap.yaml + + echo "Deploying load-data-job.yaml:" + ${KUBECTL} apply --namespace="${NAMESPACE}" -f "$(dirname "$0")/load-data-job.yaml" + + echo "Waiting for load-data-job to complete:" + ${KUBECTL} wait --namespace="${NAMESPACE}" --timeout=600s --for=condition=complete job/netbox-demo-data-load-job + + echo "Cleaning up ConfigMap:" + ${KUBECTL} delete configmap --namespace="${NAMESPACE}" netbox-demo-data-load-job-scripts +else + echo " Skipping load-data-job because directory does not exist." +fi # Install NetBox ${HELM} upgrade --install netbox \ From 619d9aad611eb12eb54fd38d3930351992c9e730 Mon Sep 17 00:00:00 2001 From: Pablo Garcia Miranda Date: Tue, 29 Apr 2025 16:18:19 +0200 Subject: [PATCH 03/12] Adding steps to load demo-data into NetBox inside the vcluster --- kind/deploy-netbox.sh | 43 ++++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/kind/deploy-netbox.sh b/kind/deploy-netbox.sh index a10f9b58..9740ecc5 100755 --- a/kind/deploy-netbox.sh +++ b/kind/deploy-netbox.sh @@ -118,27 +118,28 @@ ${HELM} upgrade --install postgres-operator \ ${KUBECTL} apply --namespace="${NAMESPACE}" -f "$(dirname "$0")/netbox-db.yaml" ${KUBECTL} wait --namespace="${NAMESPACE}" --timeout=600s --for=jsonpath='{.status.PostgresClusterStatus}'=Running postgresql/netbox-db -# Load demo data -if [[ -d "$(dirname "$0")/load-data-job" ]]; then - echo "load-data-job directory found, creating ConfigMap." - - echo "Generating ConfigMap YAML:" - ${KUBECTL} create configmap --namespace="${NAMESPACE}" netbox-demo-data-load-job-scripts --from-file="/tmp/netbox-operator/kind/load-data-job" -o yaml --dry-run=client | ${KUBECTL} apply -f - - - echo "Applying ConfigMap to Kubernetes:" - ${KUBECTL} apply -f /tmp/netbox-configmap.yaml - - echo "Deploying load-data-job.yaml:" - ${KUBECTL} apply --namespace="${NAMESPACE}" -f "$(dirname "$0")/load-data-job.yaml" - - echo "Waiting for load-data-job to complete:" - ${KUBECTL} wait --namespace="${NAMESPACE}" --timeout=600s --for=condition=complete job/netbox-demo-data-load-job - - echo "Cleaning up ConfigMap:" - ${KUBECTL} delete configmap --namespace="${NAMESPACE}" netbox-demo-data-load-job-scripts -else - echo " Skipping load-data-job because directory does not exist." -fi +echo "loading demo-data into NetBox inside the vcluster" + +# 1) Generate the ConfigMap locally, pipe into vcluster’s kubectl, +# targetting the $NAMESPACE +kubectl create configmap netbox-demo-data-load-job-scripts \ + --from-file="$(dirname "$0")/load-data-job" \ + --dry-run=client -o yaml \ +| vcluster connect "${CLUSTER}" -n "${NAMESPACE}" -- kubectl apply -n "${NAMESPACE}" -f - + +# 2) Apply the Job YAML into the same namespace +vcluster connect "${CLUSTER}" -n "${NAMESPACE}" -- kubectl apply -n "${NAMESPACE}" \ + -f "$(dirname "$0")/load-data-job.yaml" + +# 3) Wait for it in THAT namespace +vcluster connect "${CLUSTER}" -n "${NAMESPACE}" -- kubectl wait \ + -n "${NAMESPACE}" \ + --for=condition=complete \ + --timeout=600s job/netbox-demo-data-load-job + +# 4) Clean up the helper ConfigMap +vcluster connect "${CLUSTER}" -n "${NAMESPACE}" -- kubectl delete configmap \ + netbox-demo-data-load-job-scripts -n "${NAMESPACE}" # Install NetBox ${HELM} upgrade --install netbox \ From dd0d2588cba45f3ad25afe1ee13699d32e5dec20 Mon Sep 17 00:00:00 2001 From: Pablo Garcia Miranda Date: Tue, 29 Apr 2025 16:21:06 +0200 Subject: [PATCH 04/12] Adding description to script --- kind/deploy-netbox.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/kind/deploy-netbox.sh b/kind/deploy-netbox.sh index 9740ecc5..02e77183 100755 --- a/kind/deploy-netbox.sh +++ b/kind/deploy-netbox.sh @@ -1,6 +1,10 @@ #!/bin/bash set -e -u -o pipefail +# Deploy NetBox (with its PostgreSQL operator and demo data) into either: +# • a local kind cluster (preloading images), or +# • a virtual cluster via vcluster (skipping image loads). + NETBOX_HELM_CHART="https://github.com/netbox-community/netbox-chart/releases/download/netbox-5.0.0-beta.169/netbox-5.0.0-beta.169.tgz" # default value if [[ $# -lt 3 || $# -gt 4 ]]; then From f59c19a03068645d2ec0b95f4c1e8f63e0cfe44d Mon Sep 17 00:00:00 2001 From: Pablo Garcia Miranda Date: Tue, 29 Apr 2025 16:28:00 +0200 Subject: [PATCH 05/12] Adding kind path --- kind/deploy-netbox.sh | 53 +++++++++++++++++++++++++------------------ 1 file changed, 31 insertions(+), 22 deletions(-) diff --git a/kind/deploy-netbox.sh b/kind/deploy-netbox.sh index 02e77183..4bd3468c 100755 --- a/kind/deploy-netbox.sh +++ b/kind/deploy-netbox.sh @@ -122,28 +122,37 @@ ${HELM} upgrade --install postgres-operator \ ${KUBECTL} apply --namespace="${NAMESPACE}" -f "$(dirname "$0")/netbox-db.yaml" ${KUBECTL} wait --namespace="${NAMESPACE}" --timeout=600s --for=jsonpath='{.status.PostgresClusterStatus}'=Running postgresql/netbox-db -echo "loading demo-data into NetBox inside the vcluster" - -# 1) Generate the ConfigMap locally, pipe into vcluster’s kubectl, -# targetting the $NAMESPACE -kubectl create configmap netbox-demo-data-load-job-scripts \ - --from-file="$(dirname "$0")/load-data-job" \ - --dry-run=client -o yaml \ -| vcluster connect "${CLUSTER}" -n "${NAMESPACE}" -- kubectl apply -n "${NAMESPACE}" -f - - -# 2) Apply the Job YAML into the same namespace -vcluster connect "${CLUSTER}" -n "${NAMESPACE}" -- kubectl apply -n "${NAMESPACE}" \ - -f "$(dirname "$0")/load-data-job.yaml" - -# 3) Wait for it in THAT namespace -vcluster connect "${CLUSTER}" -n "${NAMESPACE}" -- kubectl wait \ - -n "${NAMESPACE}" \ - --for=condition=complete \ - --timeout=600s job/netbox-demo-data-load-job - -# 4) Clean up the helper ConfigMap -vcluster connect "${CLUSTER}" -n "${NAMESPACE}" -- kubectl delete configmap \ - netbox-demo-data-load-job-scripts -n "${NAMESPACE}" +echo "loading demo-data into NetBox…" + +if [[ "$VCLUSTER_MODE" == "--vcluster" ]]; then + # — vCluster — + echo " → inside the vcluster" + kubectl create configmap netbox-demo-data-load-job-scripts \ + --from-file="$(dirname "$0")/load-data-job" \ + --dry-run=client -o yaml \ + | vcluster connect "${CLUSTER}" -n "${NAMESPACE}" -- kubectl apply -f - + + vcluster connect "${CLUSTER}" -n "${NAMESPACE}" -- kubectl apply -f "$(dirname "$0")/load-data-job.yaml" + + vcluster connect "${CLUSTER}" -n "${NAMESPACE}" -- kubectl wait \ + --for=condition=complete --timeout=600s job/netbox-demo-data-load-job + + vcluster connect "${CLUSTER}" -n "${NAMESPACE}" -- kubectl delete configmap netbox-demo-data-load-job-scripts + +else + # — Kind — + echo " → on the Kind cluster" + kubectl create configmap netbox-demo-data-load-job-scripts \ + --from-file="$(dirname "$0")/load-data-job" \ + --dry-run=client -o yaml \ + | kubectl apply -f - + + kubectl apply -f "$(dirname "$0")/load-data-job.yaml" + + kubectl wait --for=condition=complete --timeout=600s job/netbox-demo-data-load-job + + kubectl delete configmap netbox-demo-data-load-job-scripts +fi # Install NetBox ${HELM} upgrade --install netbox \ From 94af0750b30b294a1d4ddf8a92e8b4d0e32937f6 Mon Sep 17 00:00:00 2001 From: Pablo Garcia Miranda Date: Tue, 29 Apr 2025 16:33:22 +0200 Subject: [PATCH 06/12] Adding namespaces --- kind/deploy-netbox.sh | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/kind/deploy-netbox.sh b/kind/deploy-netbox.sh index 4bd3468c..42a75b43 100755 --- a/kind/deploy-netbox.sh +++ b/kind/deploy-netbox.sh @@ -121,7 +121,6 @@ ${HELM} upgrade --install postgres-operator \ # Deploy the database ${KUBECTL} apply --namespace="${NAMESPACE}" -f "$(dirname "$0")/netbox-db.yaml" ${KUBECTL} wait --namespace="${NAMESPACE}" --timeout=600s --for=jsonpath='{.status.PostgresClusterStatus}'=Running postgresql/netbox-db - echo "loading demo-data into NetBox…" if [[ "$VCLUSTER_MODE" == "--vcluster" ]]; then @@ -130,28 +129,38 @@ if [[ "$VCLUSTER_MODE" == "--vcluster" ]]; then kubectl create configmap netbox-demo-data-load-job-scripts \ --from-file="$(dirname "$0")/load-data-job" \ --dry-run=client -o yaml \ - | vcluster connect "${CLUSTER}" -n "${NAMESPACE}" -- kubectl apply -f - + | vcluster connect "${CLUSTER}" -n "${NAMESPACE}" -- kubectl apply -n "${NAMESPACE}" -f - - vcluster connect "${CLUSTER}" -n "${NAMESPACE}" -- kubectl apply -f "$(dirname "$0")/load-data-job.yaml" + vcluster connect "${CLUSTER}" -n "${NAMESPACE}" -- kubectl apply -n "${NAMESPACE}" \ + -f "$(dirname "$0")/load-data-job.yaml" vcluster connect "${CLUSTER}" -n "${NAMESPACE}" -- kubectl wait \ - --for=condition=complete --timeout=600s job/netbox-demo-data-load-job + -n "${NAMESPACE}" --for=condition=complete --timeout=600s job/netbox-demo-data-load-job - vcluster connect "${CLUSTER}" -n "${NAMESPACE}" -- kubectl delete configmap netbox-demo-data-load-job-scripts + vcluster connect "${CLUSTER}" -n "${NAMESPACE}" -- kubectl delete \ + -n "${NAMESPACE}" configmap/netbox-demo-data-load-job-scripts else - # — Kind — - echo " → on the Kind cluster" + # — Kind — + echo " → on the Kind cluster (${NAMESPACE})" kubectl create configmap netbox-demo-data-load-job-scripts \ --from-file="$(dirname "$0")/load-data-job" \ + --namespace="${NAMESPACE}" \ --dry-run=client -o yaml \ | kubectl apply -f - - kubectl apply -f "$(dirname "$0")/load-data-job.yaml" + kubectl apply \ + --namespace="${NAMESPACE}" \ + -f "$(dirname "$0")/load-data-job.yaml" - kubectl wait --for=condition=complete --timeout=600s job/netbox-demo-data-load-job + kubectl wait \ + --namespace="${NAMESPACE}" \ + --for=condition=complete \ + --timeout=600s job/netbox-demo-data-load-job - kubectl delete configmap netbox-demo-data-load-job-scripts + kubectl delete \ + --namespace="${NAMESPACE}" \ + configmap/netbox-demo-data-load-job-scripts fi # Install NetBox From b0d8f09019c5d05e4e822910c45db6be10d48088 Mon Sep 17 00:00:00 2001 From: Pablo Garcia Miranda Date: Tue, 29 Apr 2025 16:34:06 +0200 Subject: [PATCH 07/12] Removing sleep used for testing purposes --- kind/deploy-netbox.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/kind/deploy-netbox.sh b/kind/deploy-netbox.sh index 42a75b43..7b3415f3 100755 --- a/kind/deploy-netbox.sh +++ b/kind/deploy-netbox.sh @@ -82,7 +82,6 @@ fi if [[ "$VCLUSTER_MODE" == "--vcluster" ]]; then echo "[Running in vCluster mode] skipping docker pull and kind load for remote images." - sleep 15 else echo "[Running in Kind mode] pulling and loading remote images into kind cluster..." for img in "${Remote_Images[@]}"; do From 3ba83af37160074b487fb522b049ba8b885e7f43 Mon Sep 17 00:00:00 2001 From: Pablo Garcia Miranda Date: Wed, 30 Apr 2025 08:45:18 +0200 Subject: [PATCH 08/12] Fixing script comment --- kind/deploy-netbox.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/kind/deploy-netbox.sh b/kind/deploy-netbox.sh index 7b3415f3..9f2d61af 100755 --- a/kind/deploy-netbox.sh +++ b/kind/deploy-netbox.sh @@ -2,8 +2,8 @@ set -e -u -o pipefail # Deploy NetBox (with its PostgreSQL operator and demo data) into either: -# • a local kind cluster (preloading images), or -# • a virtual cluster via vcluster (skipping image loads). +# • a local kind cluster (preloading images) +# • a virtual cluster using vcluster: https://github.com/loft-sh/vcluster ( used for testing pipeline, loading of images not needed ) NETBOX_HELM_CHART="https://github.com/netbox-community/netbox-chart/releases/download/netbox-5.0.0-beta.169/netbox-5.0.0-beta.169.tgz" # default value @@ -82,6 +82,7 @@ fi if [[ "$VCLUSTER_MODE" == "--vcluster" ]]; then echo "[Running in vCluster mode] skipping docker pull and kind load for remote images." + sleep 15 else echo "[Running in Kind mode] pulling and loading remote images into kind cluster..." for img in "${Remote_Images[@]}"; do From b1233753bcb389296b345034a728c2db345494c5 Mon Sep 17 00:00:00 2001 From: Pablo Garcia Miranda Date: Wed, 30 Apr 2025 08:49:23 +0200 Subject: [PATCH 09/12] Adding variable IS_VCLUSTER to easily check in all the if statements --- kind/deploy-netbox.sh | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/kind/deploy-netbox.sh b/kind/deploy-netbox.sh index 9f2d61af..351a3a1e 100755 --- a/kind/deploy-netbox.sh +++ b/kind/deploy-netbox.sh @@ -15,10 +15,15 @@ fi CLUSTER=$1 VERSION=$2 NAMESPACE=$3 -VCLUSTER_MODE=${4:-} + +# Treat the optional fourth argument "--vcluster" as a boolean flag +IS_VCLUSTER=false +if [[ "${4:-}" == "--vcluster" ]]; then + IS_VCLUSTER=true +fi # Choose kubectl and helm commands depending if we run on vCluster -if [[ "$VCLUSTER_MODE" == "--vcluster" ]]; then +if $IS_VCLUSTER; then KUBECTL="vcluster connect ${CLUSTER} -n ${NAMESPACE} -- kubectl" HELM="vcluster connect ${CLUSTER} -n ${NAMESPACE} -- helm" else @@ -80,7 +85,7 @@ else exit 1 fi -if [[ "$VCLUSTER_MODE" == "--vcluster" ]]; then +if $IS_VCLUSTER; then echo "[Running in vCluster mode] skipping docker pull and kind load for remote images." sleep 15 else @@ -97,7 +102,7 @@ docker build -t netbox-load-local-data:1.0 --load --no-cache --progress=plain -f cd - # Load local images into Kind only if not vCluster -if [[ "$VCLUSTER_MODE" != "--vcluster" ]]; then +if ! $IS_VCLUSTER; then echo "Loading local images into kind cluster..." declare -a Local_Images=( \ "netbox-load-local-data:1.0" \ @@ -121,9 +126,10 @@ ${HELM} upgrade --install postgres-operator \ # Deploy the database ${KUBECTL} apply --namespace="${NAMESPACE}" -f "$(dirname "$0")/netbox-db.yaml" ${KUBECTL} wait --namespace="${NAMESPACE}" --timeout=600s --for=jsonpath='{.status.PostgresClusterStatus}'=Running postgresql/netbox-db + echo "loading demo-data into NetBox…" -if [[ "$VCLUSTER_MODE" == "--vcluster" ]]; then +if $IS_VCLUSTER; then # — vCluster — echo " → inside the vcluster" kubectl create configmap netbox-demo-data-load-job-scripts \ From c2fdea6995af5d2504c494d635db3734c4a16eb4 Mon Sep 17 00:00:00 2001 From: Pablo Garcia Miranda Date: Wed, 30 Apr 2025 14:45:08 +0200 Subject: [PATCH 10/12] Refactoring part of loading demo-data into NetBox --- kind/deploy-netbox.sh | 37 ++++++++++++++----------------------- 1 file changed, 14 insertions(+), 23 deletions(-) diff --git a/kind/deploy-netbox.sh b/kind/deploy-netbox.sh index 351a3a1e..f4e3737b 100755 --- a/kind/deploy-netbox.sh +++ b/kind/deploy-netbox.sh @@ -128,46 +128,37 @@ ${KUBECTL} apply --namespace="${NAMESPACE}" -f "$(dirname "$0")/netbox-db.yaml" ${KUBECTL} wait --namespace="${NAMESPACE}" --timeout=600s --for=jsonpath='{.status.PostgresClusterStatus}'=Running postgresql/netbox-db echo "loading demo-data into NetBox…" - +# We use plain `kubectl create … --dry-run=client -o yaml` here to generate +# the ConfigMap manifest locally (no cluster connection needed), then pipe +# that YAML into `${KUBECTL} apply` so it’s applied against the selected +# target (Kind or vCluster) via our `${KUBECTL}` wrapper. if $IS_VCLUSTER; then # — vCluster — echo " → inside the vcluster" kubectl create configmap netbox-demo-data-load-job-scripts \ --from-file="$(dirname "$0")/load-data-job" \ --dry-run=client -o yaml \ - | vcluster connect "${CLUSTER}" -n "${NAMESPACE}" -- kubectl apply -n "${NAMESPACE}" -f - - - vcluster connect "${CLUSTER}" -n "${NAMESPACE}" -- kubectl apply -n "${NAMESPACE}" \ - -f "$(dirname "$0")/load-data-job.yaml" - - vcluster connect "${CLUSTER}" -n "${NAMESPACE}" -- kubectl wait \ - -n "${NAMESPACE}" --for=condition=complete --timeout=600s job/netbox-demo-data-load-job - - vcluster connect "${CLUSTER}" -n "${NAMESPACE}" -- kubectl delete \ - -n "${NAMESPACE}" configmap/netbox-demo-data-load-job-scripts + | ${KUBECTL} apply -n "${NAMESPACE}" -f - else # — Kind — echo " → on the Kind cluster (${NAMESPACE})" - kubectl create configmap netbox-demo-data-load-job-scripts \ + ${KUBECTL} create configmap netbox-demo-data-load-job-scripts \ --from-file="$(dirname "$0")/load-data-job" \ --namespace="${NAMESPACE}" \ --dry-run=client -o yaml \ - | kubectl apply -f - + | ${KUBECTL} apply -f - +fi - kubectl apply \ - --namespace="${NAMESPACE}" \ +${KUBECTL} apply -n "${NAMESPACE}" \ -f "$(dirname "$0")/load-data-job.yaml" - kubectl wait \ - --namespace="${NAMESPACE}" \ - --for=condition=complete \ - --timeout=600s job/netbox-demo-data-load-job +${KUBECTL} wait \ + -n "${NAMESPACE}" --for=condition=complete --timeout=600s job/netbox-demo-data-load-job + +${KUBECTL} delete \ + -n "${NAMESPACE}" configmap/netbox-demo-data-load-job-scripts - kubectl delete \ - --namespace="${NAMESPACE}" \ - configmap/netbox-demo-data-load-job-scripts -fi # Install NetBox ${HELM} upgrade --install netbox \ From 7908da9eeff494dcb04093cf5707c646dc6db069 Mon Sep 17 00:00:00 2001 From: Pablo Garcia Miranda Date: Fri, 2 May 2025 16:08:05 +0200 Subject: [PATCH 11/12] Removing unnecessary code & comments --- kind/deploy-netbox.sh | 23 ++++------------------- 1 file changed, 4 insertions(+), 19 deletions(-) diff --git a/kind/deploy-netbox.sh b/kind/deploy-netbox.sh index f4e3737b..ee126e2a 100755 --- a/kind/deploy-netbox.sh +++ b/kind/deploy-netbox.sh @@ -87,7 +87,6 @@ fi if $IS_VCLUSTER; then echo "[Running in vCluster mode] skipping docker pull and kind load for remote images." - sleep 15 else echo "[Running in Kind mode] pulling and loading remote images into kind cluster..." for img in "${Remote_Images[@]}"; do @@ -101,7 +100,6 @@ cd "$(dirname "$0")/load-data-job" docker build -t netbox-load-local-data:1.0 --load --no-cache --progress=plain -f ./dockerfile . cd - -# Load local images into Kind only if not vCluster if ! $IS_VCLUSTER; then echo "Loading local images into kind cluster..." declare -a Local_Images=( \ @@ -132,23 +130,10 @@ echo "loading demo-data into NetBox…" # the ConfigMap manifest locally (no cluster connection needed), then pipe # that YAML into `${KUBECTL} apply` so it’s applied against the selected # target (Kind or vCluster) via our `${KUBECTL}` wrapper. -if $IS_VCLUSTER; then - # — vCluster — - echo " → inside the vcluster" - kubectl create configmap netbox-demo-data-load-job-scripts \ - --from-file="$(dirname "$0")/load-data-job" \ - --dry-run=client -o yaml \ - | ${KUBECTL} apply -n "${NAMESPACE}" -f - - -else - # — Kind — - echo " → on the Kind cluster (${NAMESPACE})" - ${KUBECTL} create configmap netbox-demo-data-load-job-scripts \ - --from-file="$(dirname "$0")/load-data-job" \ - --namespace="${NAMESPACE}" \ - --dry-run=client -o yaml \ - | ${KUBECTL} apply -f - -fi +kubectl create configmap netbox-demo-data-load-job-scripts \ + --from-file="$(dirname "$0")/load-data-job" \ + --dry-run=client -o yaml \ +| ${KUBECTL} apply -n "${NAMESPACE}" -f - ${KUBECTL} apply -n "${NAMESPACE}" \ -f "$(dirname "$0")/load-data-job.yaml" From 67e654ea2e8e581af56b75d77c2e41fbba4f6d7c Mon Sep 17 00:00:00 2001 From: Pablo Garcia Miranda Date: Mon, 5 May 2025 11:34:32 +0200 Subject: [PATCH 12/12] Adding comment to clarify that vCluster will be deployed to the NAMESPACE passed as an argument --- kind/deploy-netbox.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/kind/deploy-netbox.sh b/kind/deploy-netbox.sh index ee126e2a..417718d5 100755 --- a/kind/deploy-netbox.sh +++ b/kind/deploy-netbox.sh @@ -14,6 +14,7 @@ fi CLUSTER=$1 VERSION=$2 +# The specified namespace will be used for both the NetBox deployment and the vCluster creation NAMESPACE=$3 # Treat the optional fourth argument "--vcluster" as a boolean flag