Skip to content

Commit 39252a2

Browse files
committed
Major change: exposing the Lieutenant API with ngrok, adding support for kind and microk8s
1 parent 291e5c8 commit 39252a2

12 files changed

+171
-23
lines changed

0_requirements.sh

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ trim () {
77
echo -n "$var"
88
}
99

10+
NGROK_VERSION=$(ngrok version)
11+
echo $NGROK_VERSION
12+
1013
DOCKER_VERSION=$(docker version | grep Version -m 1)
1114
DOCKER_VERSION=$(trim "$DOCKER_VERSION")
1215
echo "Docker $DOCKER_VERSION"

1_lieutenant_on_minikube.sh

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,12 @@ echo "===> For Minikube we must delete the default service and re-create it"
3434
kubectl -n lieutenant delete svc lieutenant-api
3535
kubectl -n lieutenant expose deployment lieutenant-api --type=NodePort --port=8080
3636

37-
echo "===> Find Lieutenant URL"
38-
LIEUTENANT_URL=$(minikube service lieutenant-api -n lieutenant --url | sed 's/http:\/\///g' | awk '{split($0,a,":"); print "lieutenant." a[1] ".nip.io:" a[2]}')
37+
echo "===> Launch ngrok in the background tunneling towards the Lieutenant API"
38+
setsid ./ngrok.sh >/dev/null 2>&1 < /dev/null &
39+
sleep 2s
40+
41+
echo "===> Find external Lieutenant URL through the ngrok API"
42+
LIEUTENANT_URL=$(curl http://localhost:4040/api/tunnels --silent | jq -r '.["tunnels"][0]["public_url"]')
3943
echo "===> Lieutenant API: $LIEUTENANT_URL"
4044
# end::demo[]
4145

@@ -64,7 +68,7 @@ kubectl -n lieutenant get tenant
6468
kubectl -n lieutenant get gitrepo
6569

6670
echo "===> Register a Lieutenant Cluster via the API"
67-
CLUSTER_ID=$(curl -s -H "$LIEUTENANT_AUTH" -H "Content-Type: application/json" -X POST --data "{ \"tenant\": \"${TENANT_ID}\", \"displayName\": \"Minikube cluster\", \"facts\": { \"cloud\": \"local\", \"distribution\": \"k3s\", \"region\": \"local\" }, \"gitRepo\": { \"url\": \"ssh://git@${GITLAB_ENDPOINT}/${GITLAB_USERNAME}/tutorial-cluster-minikube.git\" } }" "http://${LIEUTENANT_URL}/clusters" | jq -r ".id")
71+
CLUSTER_ID=$(curl -s -H "$LIEUTENANT_AUTH" -H "Content-Type: application/json" -X POST --data "{ \"tenant\": \"${TENANT_ID}\", \"displayName\": \"Minikube cluster\", \"facts\": { \"cloud\": \"local\", \"distribution\": \"k3s\", \"region\": \"local\" }, \"gitRepo\": { \"url\": \"ssh://git@${GITLAB_ENDPOINT}/${GITLAB_USERNAME}/tutorial-cluster-minikube.git\" } }" "${LIEUTENANT_URL}/clusters" | jq -r ".id")
6872
echo "Cluster ID: $CLUSTER_ID"
6973

7074
echo "===> Retrieve the registered Clusters via API and directly on the cluster"

2_commodore_on_minikube.sh

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,15 @@ fi
1919
echo "===> OK: commodore defaults forked: $GITHUB_COMMODORE_DEFAULTS"
2020

2121
echo "===> Find Lieutenant URL"
22-
LIEUTENANT_URL=$(minikube service lieutenant-api -n lieutenant --url | sed 's/http:\/\///g' | awk '{split($0,a,":"); print "http://lieutenant." a[1] ".nip.io:" a[2]} "/"')
22+
LIEUTENANT_URL=$(curl http://localhost:4040/api/tunnels --silent | jq -r '.["tunnels"][0]["public_url"]')
2323
check_variable "LIEUTENANT_URL" $LIEUTENANT_URL
2424

2525
echo "===> Find Cluster ID"
26-
CLUSTER_ID=$(kubectl -n lieutenant get cluster | grep c- | awk 'NR==1{print $1}')
26+
CLUSTER_ID=$(kubectl --context minikube -n lieutenant get cluster | grep c- | awk 'NR==1{print $1}')
2727
check_variable "CLUSTER_ID" $CLUSTER_ID
2828

2929
echo "===> Find Lieutenant Token"
30-
LIEUTENANT_TOKEN=$(kubectl -n lieutenant get secret $(kubectl -n lieutenant get sa api-access-synkickstart -o go-template='{{(index .secrets 0).name}}') -o go-template='{{.data.token | base64decode}}')
30+
LIEUTENANT_TOKEN=$(kubectl --context minikube -n lieutenant get secret $(kubectl -n lieutenant get sa api-access-synkickstart -o go-template='{{(index .secrets 0).name}}') -o go-template='{{.data.token | base64decode}}')
3131

3232
echo "===> Kickstart Commodore"
3333
echo "===> IMPORTANT: When prompted enter your SSH key password"

3_steward_on_minikube.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ CLUSTER_ID=$(kubectl --context minikube -n lieutenant get cluster | grep Minikub
1010
check_variable "CLUSTER_ID" $CLUSTER_ID
1111

1212
echo "===> Find Lieutenant URL"
13-
LIEUTENANT_URL=$(minikube service lieutenant-api -n lieutenant --url | sed 's/http:\/\///g' | awk '{split($0,a,":"); print "http://lieutenant." a[1] ".nip.io:" a[2] }')
13+
LIEUTENANT_URL=$(curl http://localhost:4040/api/tunnels --silent | jq -r '.["tunnels"][0]["public_url"]')
1414
check_variable "LIEUTENANT_URL" $LIEUTENANT_URL
1515

1616
echo "===> Find Lieutenant API token"

4_synthesize_on_k3s.sh

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,7 @@ check_variable "LIEUTENANT_TOKEN" $LIEUTENANT_TOKEN
1212
check_variable "COMMODORE_SSH_PRIVATE_KEY" $COMMODORE_SSH_PRIVATE_KEY
1313

1414
# Launch K3s
15-
if [[ "$OSTYPE" == "darwin"* ]]; then
16-
k3d cluster create projectsyn
17-
else
18-
k3d cluster create projectsyn --network host
19-
fi
15+
k3d cluster create projectsyn
2016

2117
wait_for_k3s
2218
wait_for_traefik

4_synthesize_on_kind.sh

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
#!/usr/bin/env bash
2+
3+
source lib/functions.sh
4+
5+
check_variable "GITLAB_TOKEN" $GITLAB_TOKEN
6+
check_variable "GITLAB_ENDPOINT" $GITLAB_ENDPOINT
7+
check_variable "GITLAB_USERNAME" $GITLAB_USERNAME
8+
check_variable "TENANT_ID" $TENANT_ID
9+
check_variable "LIEUTENANT_URL" $LIEUTENANT_URL
10+
check_variable "LIEUTENANT_TOKEN" $LIEUTENANT_TOKEN
11+
check_variable "COMMODORE_SSH_PRIVATE_KEY" $COMMODORE_SSH_PRIVATE_KEY
12+
13+
# Launch kind
14+
kind create cluster --name projectsyn
15+
16+
LIEUTENANT_AUTH="Authorization: Bearer ${LIEUTENANT_TOKEN}"
17+
18+
echo "===> Register this cluster via the API"
19+
CLUSTER_ID=$(curl -s -H "$LIEUTENANT_AUTH" -H "Content-Type: application/json" -X POST --data "{ \"tenant\": \"${TENANT_ID}\", \"displayName\": \"Kind cluster\", \"facts\": { \"cloud\": \"local\", \"distribution\": \"k3s\", \"region\": \"local\" }, \"gitRepo\": { \"url\": \"ssh://git@${GITLAB_ENDPOINT}/${GITLAB_USERNAME}/tutorial-cluster-kind.git\" } }" "${LIEUTENANT_URL}/clusters" | jq -r ".id")
20+
check_variable "CLUSTER_ID" $CLUSTER_ID
21+
22+
echo "===> Kickstart Commodore"
23+
echo "===> IMPORTANT: When prompted enter your SSH key password"
24+
kubectl --context minikube -n lieutenant run commodore-shell \
25+
--image=docker.io/projectsyn/commodore:v0.2.0 \
26+
--env=COMMODORE_API_URL="$LIEUTENANT_URL" \
27+
--env=COMMODORE_API_TOKEN="$LIEUTENANT_TOKEN" \
28+
--env=COMMODORE_GLOBAL_GIT_BASE="https://github.com/$GITHUB_USERNAME" \
29+
--env=SSH_PRIVATE_KEY="$(cat ${COMMODORE_SSH_PRIVATE_KEY})" \
30+
--env=CLUSTER_ID="$CLUSTER_ID" \
31+
--env=GITLAB_ENDPOINT="$GITLAB_ENDPOINT" \
32+
--tty --stdin --restart=Never --rm --wait \
33+
--image-pull-policy=Always \
34+
--command \
35+
-- /usr/local/bin/entrypoint.sh bash -c "ssh-keyscan $GITLAB_ENDPOINT >> /app/.ssh/known_hosts; commodore catalog compile $CLUSTER_ID --push"
36+
37+
echo "===> COMMODORE DONE"
38+
39+
echo "===> Check the validity of the bootstrap token"
40+
wait_for_token "$CLUSTER_ID"
41+
42+
echo "===> Retrieve the Steward install URL"
43+
STEWARD_INSTALL=$(curl --header "$LIEUTENANT_AUTH" --silent "${LIEUTENANT_URL}/clusters/${CLUSTER_ID}" | jq -r ".installURL")
44+
echo "===> Steward install URL: $STEWARD_INSTALL"
45+
46+
echo "===> Install Steward in the local kind cluster"
47+
kubectl --context kind-projectsyn apply -f "$STEWARD_INSTALL"
48+
49+
echo "===> Check that Steward is running and that Argo CD Pods are appearing"
50+
kubectl --context kind-projectsyn -n syn get pod
51+
52+
echo ""
53+
echo "===> STEWARD DONE"

4_synthesize_on_microk8s.sh

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
#!/usr/bin/env bash
2+
3+
source lib/functions.sh
4+
5+
check_variable "GITLAB_TOKEN" $GITLAB_TOKEN
6+
check_variable "GITLAB_ENDPOINT" $GITLAB_ENDPOINT
7+
check_variable "GITLAB_USERNAME" $GITLAB_USERNAME
8+
check_variable "TENANT_ID" $TENANT_ID
9+
check_variable "LIEUTENANT_URL" $LIEUTENANT_URL
10+
check_variable "LIEUTENANT_TOKEN" $LIEUTENANT_TOKEN
11+
check_variable "COMMODORE_SSH_PRIVATE_KEY" $COMMODORE_SSH_PRIVATE_KEY
12+
13+
# Launch microk8s
14+
microk8s start
15+
microk8s enable dns
16+
microk8s status --wait-ready
17+
18+
LIEUTENANT_AUTH="Authorization: Bearer ${LIEUTENANT_TOKEN}"
19+
20+
echo "===> Register this cluster via the API"
21+
CLUSTER_ID=$(curl -s -H "$LIEUTENANT_AUTH" -H "Content-Type: application/json" -X POST --data "{ \"tenant\": \"${TENANT_ID}\", \"displayName\": \"Microk8s cluster\", \"facts\": { \"cloud\": \"local\", \"distribution\": \"k3s\", \"region\": \"local\" }, \"gitRepo\": { \"url\": \"ssh://git@${GITLAB_ENDPOINT}/${GITLAB_USERNAME}/tutorial-cluster-microk8s.git\" } }" "${LIEUTENANT_URL}/clusters" | jq -r ".id")
22+
check_variable "CLUSTER_ID" $CLUSTER_ID
23+
24+
echo "===> Kickstart Commodore"
25+
echo "===> IMPORTANT: When prompted enter your SSH key password"
26+
kubectl --context minikube -n lieutenant run commodore-shell \
27+
--image=docker.io/projectsyn/commodore:v0.2.0 \
28+
--env=COMMODORE_API_URL="$LIEUTENANT_URL" \
29+
--env=COMMODORE_API_TOKEN="$LIEUTENANT_TOKEN" \
30+
--env=COMMODORE_GLOBAL_GIT_BASE="https://github.com/$GITHUB_USERNAME" \
31+
--env=SSH_PRIVATE_KEY="$(cat ${COMMODORE_SSH_PRIVATE_KEY})" \
32+
--env=CLUSTER_ID="$CLUSTER_ID" \
33+
--env=GITLAB_ENDPOINT="$GITLAB_ENDPOINT" \
34+
--tty --stdin --restart=Never --rm --wait \
35+
--image-pull-policy=Always \
36+
--command \
37+
-- /usr/local/bin/entrypoint.sh bash -c "ssh-keyscan $GITLAB_ENDPOINT >> /app/.ssh/known_hosts; commodore catalog compile $CLUSTER_ID --push"
38+
39+
echo "===> COMMODORE DONE"
40+
41+
echo "===> Check the validity of the bootstrap token"
42+
wait_for_token "$CLUSTER_ID"
43+
44+
echo "===> Retrieve the Steward install URL"
45+
STEWARD_INSTALL=$(curl --header "$LIEUTENANT_AUTH" --silent "${LIEUTENANT_URL}/clusters/${CLUSTER_ID}" | jq -r ".installURL")
46+
echo "===> Steward install URL: $STEWARD_INSTALL"
47+
48+
echo "===> Install Steward in the local kind cluster"
49+
microk8s.kubectl apply -f "$STEWARD_INSTALL"
50+
51+
echo "===> Check that Steward is running and that Argo CD Pods are appearing"
52+
microk8s.kubectl -n syn get pod
53+
54+
echo ""
55+
echo "===> STEWARD DONE"

5_delete.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,4 @@ kubectl --context minikube -n lieutenant delete cluster "$MINIKUBE_CLUSTER_ID"
2323
kubectl --context minikube -n lieutenant delete tenant "$TENANT_ID"
2424
minikube delete
2525
k3d cluster delete projectsyn
26-
26+
killall ngrok

assets/images/ngrok_inspect.png

162 KB
Loading

env.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/usr/bin/env bash
22

3-
LIEUTENANT_URL=http://$(minikube service lieutenant-api -n lieutenant --url | sed 's/http:\/\///g' | awk '{split($0,a,":"); print "lieutenant." a[1] ".nip.io:" a[2]}')
3+
LIEUTENANT_URL=$(curl http://localhost:4040/api/tunnels --silent | jq -r '.["tunnels"][0]["public_url"]')
44
export LIEUTENANT_URL
55

66
TENANT_ID=$(kubectl --context minikube --namespace lieutenant get tenant | grep t- | awk 'NR==1{print $1}')

0 commit comments

Comments
 (0)