Skip to content
This repository has been archived by the owner on Jan 9, 2025. It is now read-only.

Commit

Permalink
Merge branch 'main' into egomes/new-gateway-management
Browse files Browse the repository at this point in the history
  • Loading branch information
lostbean committed Sep 26, 2024
2 parents a7dd50f + 54bdc21 commit 34ba9ba
Show file tree
Hide file tree
Showing 4 changed files with 137 additions and 26 deletions.
130 changes: 114 additions & 16 deletions .github/workflows/ci-e2e-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -88,36 +88,76 @@ jobs:
- name: Deploy Kardinal manager
run: |
KARDINAL_CLI_DEV_MODE=TRUE /tmp/kardinal-cli manager deploy local-minikube
KARDINAL_CLI_DEV_MODE=TRUE /tmp/kardinal-cli manager deploy local-kardinal-kontrol
# Check that the three kardinal manager service pods are running and ready
while [ $(kubectl get pods -n default --no-headers -o custom-columns=NAMESPACE:metadata.namespace,POD:metadata.name,PodIP:status.podIP,READY-true:status.containerStatuses[*].ready | grep "true" | wc -l) -ne 3 ]
do
echo "Waiting for kardinal manager pods to run..."
kubectl get pods -n default -o custom-columns=NAMESPACE:metadata.namespace,POD:metadata.name,PodIP:status.podIP,READY-true:status.containerStatuses[*].ready
((c++)) && ((c==12)) && exit 1
sleep 10
done
apps=$(kubectl get pods -n default -o custom-columns=:metadata.labels.app | tr " " "\n" | sort -g | tr "\n" " " | xargs)
echo ${apps}
if [ "${apps}" != "kardinal-manager trace-router trace-router-redis" ]; then exit 1; fi
# Check for errors in the kardinal manager logs
if kubectl logs -n default -l dev.kardinal.app-id=kardinal-manager | grep -q "ERRO"
then
echo "Errors found in the kardinal manager logs"
kubectl logs -n default -l dev.kardinal.app-id=kardinal-manager | grep "ERRO"
fi
- name: Deploy boutique demo manifest
run: |
KARDINAL_CLI_DEV_MODE=TRUE /tmp/kardinal-cli deploy -k ci/obd-demo.yaml
- name: Validate that Kardinal manager applied the changes
run: |
# Check that the four baseline service pods are running and ready
while [ $(kubectl get pods -n baseline -o custom-columns=NAMESPACE:metadata.namespace,POD:metadata.name,PodIP:status.podIP,READY-true:status.containerStatuses[*].ready | grep "true,true" | wc -l) -ne 4 ]
while [ $(kubectl get pods -n baseline --no-headers -o custom-columns=NAMESPACE:metadata.namespace,POD:metadata.name,PodIP:status.podIP,READY-true:status.containerStatuses[*].ready | grep "true,true" | wc -l) -ne 4 ]
do
echo "Waiting for baseline pods to run..."
kubectl get pods -n baseline -o custom-columns=NAMESPACE:metadata.namespace,POD:metadata.name,PodIP:status.podIP,READY-true:status.containerStatuses[*].ready
((c++)) && ((c==12)) && exit 1
sleep 10
done
kubectl get pods -n baseline
# Check the right services are running.
apps=$(kubectl get pods -n baseline -o custom-columns=:metadata.labels.app | tr " " "\n" | sort -g | tr "\n" " " | xargs)
echo ${apps}
if [ "${apps}" != "cartservice frontend postgres productcatalogservice" ]; then exit 1; fi
# Check for errors in the kardinal manager logs
if kubectl logs -n default -l dev.kardinal.app-id=kardinal-manager | grep "ERRO"
if kubectl logs -n default -l dev.kardinal.app-id=kardinal-manager | grep -q "ERRO"
then
echo "Errors found in the kardinal manager"
echo "Errors found in the kardinal manager logs"
kubectl logs -n default -l dev.kardinal.app-id=kardinal-manager | grep "ERRO"
fi
- name: Start gateway to the baseline flow and validate access
run: |
KARDINAL_CLI_DEV_MODE=TRUE /tmp/kardinal-cli gateway baseline > kardinal.out &
cli_pid=$!
while ! grep "Proxy server for host" kardinal.out
do
echo "Waiting for gateway to start..."
cat kardinal.out
((c++)) && ((c==12)) && exit 1
sleep 10
done
flow_url=$(grep "http" kardinal.out | awk '{print $NF}')
status_code=$(curl -s -o /dev/null -w "%{http_code}" ${flow_url})
echo "${flow_url} returned status code ${status_code}"
if [ "${status_code}" != "200" ]; then exit 1; fi
kill ${cli_pid}
# Check for errors in the trace router logs
if kubectl logs -n default -l app=trace-router | grep -q "ERRO"
then
echo "Errors found in the trace router logs"
kubectl logs -n default -l app=trace-router | grep "ERRO"
fi
- name: Create, validate and delete flow
run: |
KARDINAL_CLI_DEV_MODE=TRUE /tmp/kardinal-cli flow create frontend kurtosistech/frontend:demo-frontend > kardinal.out
Expand All @@ -126,21 +166,54 @@ jobs:
KARDINAL_CLI_DEV_MODE=TRUE /tmp/kardinal-cli flow ls | grep ${flow_id}
# Check that the dev service pod is running and ready
while ! kubectl get pods -n baseline -o custom-columns=NAMESPACE:metadata.namespace,POD:metadata.name,PodIP:status.podIP,READY-true:status.containerStatuses[*].ready | grep true | grep "frontend-${flow_id}"
while ! kubectl get pods -n baseline --no-headers -o custom-columns=NAMESPACE:metadata.namespace,POD:metadata.name,PodIP:status.podIP,READY-true:status.containerStatuses[*].ready | grep true | grep "frontend-${flow_id}"
do
echo "Waiting for dev frontend pod to run..."
kubectl get pods -n baseline -o custom-columns=NAMESPACE:metadata.namespace,POD:metadata.name,PodIP:status.podIP,READY-true:status.containerStatuses[*].ready
((c++)) && ((c==12)) && exit 1
sleep 10
done
kubectl get pods -n baseline
# Start gateway to the flow and validate access
KARDINAL_CLI_DEV_MODE=TRUE /tmp/kardinal-cli gateway ${flow_id} > kardinal.out &
cli_pid=$!
while ! grep "Proxy server for host" kardinal.out
do
echo "Waiting for gateway to start..."
cat kardinal.out
((c++)) && ((c==12)) && exit 1
sleep 10
done
flow_url=$(grep "http" kardinal.out | awk '{print $NF}')
status_code=$(curl -s -o /dev/null -w "%{http_code}" ${flow_url})
echo "${flow_url} returned status code ${status_code}"
if [ "${status_code}" != "200" ]; then exit 1; fi
kill ${cli_pid}
# Check for errors in the trace router logs
if kubectl logs -n default -l app=trace-router | grep -q "ERRO"
then
echo "Errors found in the trace router logs"
kubectl logs -n default -l app=trace-router | grep "ERRO"
fi
KARDINAL_CLI_DEV_MODE=TRUE /tmp/kardinal-cli flow delete ${flow_id}

# Check that the dev service pod is not running anymore
while kubectl get pods -n baseline | grep "frontend-${flow_id}"
do
echo "Waiting for dev frontend pod to terminate..."
kubectl get pods -n baseline
((c++)) && ((c==12)) && exit 1
sleep 10
done
kubectl get pods -n baseline

# Check for errors in the kardinal manager logs
if kubectl logs -n default -l dev.kardinal.app-id=kardinal-manager | grep "ERRO"
if kubectl logs -n default -l dev.kardinal.app-id=kardinal-manager | grep -q "ERRO"
then
echo "Errors found in the kardinal manager"
echo "Errors found in the kardinal manager logs"
kubectl logs -n default -l dev.kardinal.app-id=kardinal-manager | grep "ERRO"
fi

Expand All @@ -157,7 +230,7 @@ jobs:
KARDINAL_CLI_DEV_MODE=TRUE /tmp/kardinal-cli flow ls | grep ${flow_id}
# Check that the dev service pod is running and ready
while ! kubectl get pods -n baseline -o custom-columns=NAMESPACE:metadata.namespace,POD:metadata.name,PodIP:status.podIP,READY-true:status.containerStatuses[*].ready | grep true | grep "frontend-${flow_id}"
while ! kubectl get pods -n baseline --no-headers -o custom-columns=NAMESPACE:metadata.namespace,POD:metadata.name,PodIP:status.podIP,READY-true:status.containerStatuses[*].ready | grep true | grep "frontend-${flow_id}"
do
echo "Waiting for dev frontend pod to run..."
kubectl get pods -n baseline -o custom-columns=NAMESPACE:metadata.namespace,POD:metadata.name,PodIP:status.podIP,READY-true:status.containerStatuses[*].ready
Expand All @@ -168,10 +241,20 @@ jobs:
KARDINAL_CLI_DEV_MODE=TRUE /tmp/kardinal-cli flow delete ${flow_id}
# Check that the dev service pod is not running anymore
while kubectl get pods -n baseline | grep "frontend-${flow_id}"
do
echo "Waiting for dev frontend pod to terminate..."
kubectl get pods -n baseline
((c++)) && ((c==12)) && exit 1
sleep 10
done
kubectl get pods -n baseline
# Check for errors in the kardinal manager logs
if kubectl logs -n default -l dev.kardinal.app-id=kardinal-manager | grep "ERRO"
if kubectl logs -n default -l dev.kardinal.app-id=kardinal-manager | grep -q "ERRO"
then
echo "Errors found in the kardinal manager"
echo "Errors found in the kardinal manager logs"
kubectl logs -n default -l dev.kardinal.app-id=kardinal-manager | grep "ERRO"
fi
Expand All @@ -196,8 +279,23 @@ jobs:
kubectl get pods -n baseline
# Check for errors in the kardinal manager logs
if kubectl logs -n default -l dev.kardinal.app-id=kardinal-manager | grep "ERRO"
if kubectl logs -n default -l dev.kardinal.app-id=kardinal-manager | grep -q "ERRO"
then
echo "Errors found in the kardinal manager"
echo "Errors found in the kardinal manager logs"
kubectl logs -n default -l dev.kardinal.app-id=kardinal-manager | grep "ERRO"
fi
- name: Remove kardinal manager
run: |
KARDINAL_CLI_DEV_MODE=TRUE /tmp/kardinal-cli manager remove > kardinal.out
# Check that the services have been terminated
while [ "$(kubectl get pods -n default 2>&1 >/dev/null)" != "No resources found in default namespace." ]
do
echo "Waiting for the services to terminate..."
kubectl get pods -n default
((c++)) && ((c==12)) && exit 1
sleep 10
done
kubectl get pods -n default
9 changes: 5 additions & 4 deletions kardinal-cli/cmd/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -480,9 +480,10 @@ var topologyManifestCmd = &cobra.Command{
}

var deployManagerCmd = &cobra.Command{
Use: fmt.Sprintf("deploy [kontrol location] accepted values: %s and %s ", kontrol.KontrolLocationLocalMinikube, kontrol.KontrolLocationKloudKontrol),
Use: fmt.Sprintf("deploy [kardinal-kontrol service location] accepted values: %s and %s ", kontrol.KontrolLocationLocal, kontrol.KontrolLocationKloud),
Short: "Deploy Kardinal manager into the cluster",
ValidArgs: []string{kontrol.KontrolLocationLocalMinikube, kontrol.KontrolLocationKloudKontrol},
Long: "The Kardinal Manager retrieves the latest configuration from the Kardinal Kontrol service and applies changes to the user K8S topology. The Kardinal Kontrol service can be the one running in the Kardinal Cloud or can be the one deployed locally.",
ValidArgs: []string{kontrol.KontrolLocationLocal, kontrol.KontrolLocationKloud},
Args: cobra.MatchAll(cobra.ExactArgs(1), cobra.OnlyValidArgs),
Run: func(cmd *cobra.Command, args []string) {
kontrolLocation := args[0]
Expand Down Expand Up @@ -1122,10 +1123,10 @@ func getKontrolBaseURLForManager() (string, error) {
)

switch kontrolLocation {
case kontrol.KontrolLocationLocalMinikube:
case kontrol.KontrolLocationLocal:
scheme = httpSchme
host = localMinikubeKontrolAPIHost
case kontrol.KontrolLocationKloudKontrol:
case kontrol.KontrolLocationKloud:
scheme = httpsScheme
host = kloudKontrolAPIHost
default:
Expand Down
5 changes: 3 additions & 2 deletions kardinal-cli/deployment/deployment.go
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ spec:
metadata:
labels:
{{.KardinalAppIDLabelKey}}: {{.KardinalManagerAppIDLabelValue}}
app: kardinal-manager
spec:
serviceAccountName: kardinal-manager
containers:
Expand Down Expand Up @@ -217,9 +218,9 @@ func DeployKardinalManagerInCluster(ctx context.Context, clusterResourcesURL str
var imagePullPolicy string

switch kontrolLocation {
case kontrol.KontrolLocationLocalMinikube:
case kontrol.KontrolLocationLocal:
imagePullPolicy = "IfNotPresent"
case kontrol.KontrolLocationKloudKontrol:
case kontrol.KontrolLocationKloud:
imagePullPolicy = "Always"
default:
stacktrace.NewError("invalid Kontrol location: %s", kontrolLocation)
Expand Down
19 changes: 15 additions & 4 deletions kardinal-cli/kontrol/location.go
Original file line number Diff line number Diff line change
@@ -1,15 +1,19 @@
package kontrol

import (
"fmt"
"os"

"github.com/kurtosis-tech/stacktrace"
"github.com/sirupsen/logrus"
"kardinal.cli/host_machine_directories"
"os"
)

const (
KontrolLocationLocalMinikube = "local-minikube"
KontrolLocationKloudKontrol = "kloud-kontrol"
KontrolLocationLocal = "local-kardinal-kontrol"
KontrolLocationKloud = "kloud-kardinal-kontrol"
OldKontrolLocationLocal = "local-minikube"
OldKontrolLocationKloud = "kloud-kontrol"
kontrolLocationFilePermissions os.FileMode = 0644
)

Expand All @@ -33,9 +37,10 @@ func GetKontrolLocation() (string, error) {
return "", stacktrace.Propagate(err, "An error occurred getting the Kontrol location filepath")
}

fmt.Println(kontrolLocationFilepath)
_, err = os.Stat(kontrolLocationFilepath)
if err != nil {
return "", stacktrace.Propagate(err, "An error occurred getting the Kontrol location file info")
return "", stacktrace.Propagate(err, "An error occurred getting the Kontrol location file info")
}

kontrolLocationFileBytes, err := os.ReadFile(kontrolLocationFilepath)
Expand All @@ -44,6 +49,12 @@ func GetKontrolLocation() (string, error) {
}

kontrolLocationFileStr := string(kontrolLocationFileBytes)
switch kontrolLocationFileStr {
case OldKontrolLocationLocal:
kontrolLocationFileStr = KontrolLocationLocal
case OldKontrolLocationKloud:
kontrolLocationFileStr = KontrolLocationKloud
}

logrus.Infof("Using Kontrol location %s", kontrolLocationFileStr)
return kontrolLocationFileStr, nil
Expand Down

0 comments on commit 34ba9ba

Please sign in to comment.