Skip to content

Commit

Permalink
Add portal bootstraping (#56)
Browse files Browse the repository at this point in the history
* Update tyk versions

* Add portal bootstraping
  • Loading branch information
zalbiraw authored Jul 23, 2024
1 parent c546a48 commit 574e9e1
Show file tree
Hide file tree
Showing 4 changed files with 148 additions and 2 deletions.
79 changes: 79 additions & 0 deletions src/deployments/portal/bootstrap-configmap-template.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
---
apiVersion: v1
kind: ConfigMap
metadata:
name: portal-bootstrap-configmap
data:
bootstrap.sh: |
# Create provider
res=$(curl -vvv --location 'replace_url/portal-api/providers' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header "Authorization: $PORTAL_API_KEY" \
--data '{
"Configuration": {
"MetaData": "{\"URL\":\"replace_dashboard_url\",\"Secret\":\"'$DASHBOARD_API_KEY'\",\"OrgID\":\"'$DASHBOARD_ORG_ID'\",\"Gateway\":\"\",\"PoliciesTags\":[],\"InsecureSkipVerify\":true}"
},
"Name": "Tyk Dashboard",
"Type": "tyk-pro"
}' );
providerID=$(echo $res | jq -r .ID);
# Sync provider
curl -vvv --location --request PUT "replace_url/portal-api/providers/$providerID/synchronize" \
--header "Accept: application/json" \
--header "Authorization: $PORTAL_API_KEY"
# Create Orgs
curl -vvv --location 'replace_url/portal-api/organisations' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header "Authorization: $PORTAL_API_KEY" \
--data '{
"Name": "Internal Developers Organization"
}'
curl -vvv --location 'replace_url/portal-api/organisations' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header "Authorization: $PORTAL_API_KEY" \
--data '{
"Name": "External Developers and Partners Organization"
}'
# Create Users
res=$(curl -vvv --location 'replace_url/portal-api/users' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header "Authorization: $PORTAL_API_KEY" \
--data-raw '{
"Active": "true",
"Email": "[email protected]",
"First": "Internal",
"Last": "User",
"Organisation": {"ID": "2"},
"Role": "consumer-admin",
"Provider": "password",
"ResetPassword": "false",
"Teams": "2",
"Password": "password"
}')
internalUserID=$(echo $res | jq -r .ID);
res=$(curl -vvv --location 'replace_url/portal-api/users' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header "Authorization: $PORTAL_API_KEY" \
--data-raw '{
"Active": "true",
"Email": "[email protected]",
"First": "External",
"Last": "User",
"Organisation": {"ID": "3"},
"Role": "consumer-admin",
"Provider": "password",
"ResetPassword": "false",
"Teams": "3",
"Password": "password"
}')
externalUserID=$(echo $res | jq -r .ID);
39 changes: 39 additions & 0 deletions src/deployments/portal/bootstrap-job.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
apiVersion: batch/v1
kind: Job
metadata:
name: portal-bootstrap-job
spec:
template:
spec:
containers:
- name: portal-bootstrap
image: pnnlmiscscripts/curl-jq:latest
command: ["/bin/sh", "/scripts/bootstrap.sh"]
env:
- name: PORTAL_API_KEY
valueFrom:
secretKeyRef:
name: portal-bootstrap-secrets
key: PORTAL_API_KEY
- name: DASHBOARD_ORG_ID
valueFrom:
secretKeyRef:
name: portal-bootstrap-secrets
key: DASHBOARD_ORG_ID
- name: DASHBOARD_API_KEY
valueFrom:
secretKeyRef:
name: portal-bootstrap-secrets
key: DASHBOARD_API_KEY
volumeMounts:
- name: portal-bootstrap-volume
mountPath: /scripts/bootstrap.sh
subPath: bootstrap.sh
restartPolicy: Never
volumes:
- name: portal-bootstrap-volume
configMap:
name: portal-bootstrap-configmap
items:
- key: bootstrap.sh
path: bootstrap.sh
26 changes: 26 additions & 0 deletions src/deployments/portal/bootstrap.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
set +e;
search=$(kubectl get secret --namespace "$namespace" | awk '{print $1}' | grep -e "^portal-bootstrap-secrets");
logger "$DEBUG" "namespace-exists: search result: $search";
set -e;

if [[ -z $search ]]; then
logger "$INFO" "bootstrapping portal...";
# Get pod and JWT
pod=$(kubectl get pods --namespace "$namespace" -l "app=$tykReleaseName-tyk-dev-portal" -o jsonpath='{.items[*].metadata.name}');
jwt=$(kubectl logs --namespace "$namespace" "$pod" | awk -F'Generated JWToken: ' '{print substr($2, 1, length($2)-2)}' | tr -d '[:space:]');

# Create secret
kubectl create secret generic "portal-bootstrap-secrets" --namespace "$namespace" \
--from-literal="PORTAL_API_KEY=$jwt" \
--from-literal="DASHBOARD_ORG_ID=$(kubectl get secrets -n tyk tyk-operator-conf -o=jsonpath="{.data.TYK_ORG}" | base64 -d)" \
--from-literal="DASHBOARD_API_KEY=$(kubectl get secrets -n tyk tyk-operator-conf -o=jsonpath="{.data.TYK_AUTH}" | base64 -d)" \
> /dev/null;

# Create bootstrap script configmap
sed "s/replace_url/$protocol:\/\/dev-portal-svc-$tykReleaseName-tyk-dev-portal:$PORTAL_SERVICE_PORT/g" "$portalDeploymentPath/bootstrap-configmap-template.yaml" | \
sed "s/replace_dashboard_url/$protocol:\/\/dashboard-svc-$tykReleaseName-tyk-dashboard:3000/g" | \
kubectl apply --namespace "$namespace" -f - > /dev/null;

# Run bootstrap job
kubectl apply --namespace "$namespace" -f "$portalDeploymentPath/bootstrap-job.yaml" > /dev/null;
fi
6 changes: 4 additions & 2 deletions src/deployments/portal/main.sh
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
logger "$INFO" "installing portal in $namespace namespace...";

portalDBName=portal;
portalDBPort=54321;
source src/main/storage/pgsql.sh $portalDBName $portalDBPort;

logger "$INFO" "installing portal in $namespace namespace...";

addService "dev-portal-svc-$tykReleaseName-tyk-dev-portal";

args=(
Expand All @@ -23,3 +23,5 @@ args=(

addDeploymentArgs "${args[@]}";
upgradeTyk;

source "$portalDeploymentPath/bootstrap.sh";

0 comments on commit 574e9e1

Please sign in to comment.