OpenWifi 2.0 load simulation #213
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: OpenWifi 2.0 load simulation | |
env: | |
# AWS credentials | |
AWS_EKS_NAME: tip-wlan-main | |
AWS_DEFAULT_OUTPUT: json | |
AWS_DEFAULT_REGION: us-east-2 | |
AWS_ACCOUNT_ID: ${{ secrets.AWS_ACCOUNT_ID }} | |
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_CLIENT_ID }} | |
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_CLIENT_KEY }} | |
# Docker-compose related ENVs | |
EC2_INSTANCE_TYPE: m5a.xlarge | |
EC2_SECURITY_GROUP_ID: sg-012299a8201a0761c | |
EC2_KEY_NAME: loadsim | |
VPC_SUBNET_ID: subnet-08ef4ccda4af94c38 | |
ROUTE_53_ZONE_ID: Z09534373UTXT2L1YL912 | |
SIMULATORID: 53494D020202 | |
on: | |
workflow_dispatch: | |
inputs: | |
sdk_version: | |
default: 'main' | |
description: 'Version of Cloud SDK to test' | |
required: true | |
owls_version: | |
default: 'v2.10.0' | |
description: 'Version of OWLs to use' | |
required: true | |
devices_count: | |
default: '25000' | |
description: 'Amount of devices to simulate' | |
required: true | |
simulation_lenght: | |
default: '360' | |
description: 'Simulation lenght in seconds' | |
required: true | |
defaults: | |
run: | |
shell: bash | |
jobs: | |
docker-compose-sqlite: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Set EC2 facts | |
id: ec2_facts | |
run: | | |
AMI=$(aws ec2 describe-images --filters '[{"Name":"description","Values":["Canonical, Ubuntu, 20.04 LTS, amd64*"]},{"Name":"owner-id","Values":["099720109477"]}]' --query 'sort_by(Images, &CreationDate)[-1].ImageId' --output text) | |
INSTANCE_NAME=owgw-dc-sqlite-${{ github.run_number }} | |
echo "ami=${AMI}" >> $GITHUB_OUTPUT | |
echo "instance_name=${INSTANCE_NAME}" >> $GITHUB_OUTPUT | |
# Create EC2 infrastructure | |
- name: Create EC2 instance for CloudSDK | |
id: ec2_instance | |
run: | | |
aws ec2 run-instances --key-name $EC2_KEY_NAME --subnet-id $VPC_SUBNET_ID --security-group-ids $EC2_SECURITY_GROUP_ID --instance-type $EC2_INSTANCE_TYPE --image-id ${{ steps.ec2_facts.outputs.ami }} --tag-specifications "ResourceType=instance,Tags=[{Key=Name,Value=${{ steps.ec2_facts.outputs.instance_name }}},{Key=Owner,Value=gha-wlan-testing}]" --output text | |
INSTANCE_PUBLIC_IP=$(aws ec2 describe-instances --filters "Name=tag:Name,Values=${{ steps.ec2_facts.outputs.instance_name }}" --query 'Reservations[*].Instances[*].PublicIpAddress' --output text) | |
INSTANCE_ID=$(aws ec2 describe-instances --filters "Name=tag:Name,Values=${{ steps.ec2_facts.outputs.instance_name }}" --query 'Reservations[*].Instances[*].InstanceId' --output text) | |
echo "instance_public_ip=${INSTANCE_PUBLIC_IP}" >> $GITHUB_OUTPUT | |
echo "instance_id=${INSTANCE_ID}" >> $GITHUB_OUTPUT | |
- name: Create Route53 record | |
run: | | |
cat > changeset.json << EOF | |
{ | |
"Comment": "Creating A for ${{ steps.ec2_facts.outputs.instance_name }}", | |
"Changes": [{ | |
"Action": "CREATE", | |
"ResourceRecordSet": { | |
"Name": "${{ steps.ec2_facts.outputs.instance_name }}.cicd.lab.wlan.tip.build", | |
"Type": "A", | |
"TTL": 600, | |
"ResourceRecords":[{ | |
"Value": "${{ steps.ec2_instance.outputs.instance_public_ip }}" | |
}]} | |
}] | |
} | |
EOF | |
aws route53 change-resource-record-sets --hosted-zone-id $ROUTE_53_ZONE_ID --change-batch file://changeset.json | |
# Deploy target CloudSDK into EC2 instance | |
- name: Get DigiCert certificates | |
run: | | |
echo "${{ secrets.DIGICERT_CERT }}" | base64 -d > cert.pem | |
echo "${{ secrets.DIGICERT_KEY }}" | base64 -d > key.pem | |
- name: Save SSH key for access to EC2 instance | |
run: | | |
echo "${{ secrets.SSH_LOADSIM }}" > ssh_key.pem | |
chmod 600 ssh_key.pem | |
- name: Try connecting to EC2 instance | |
run: | | |
until ssh -o "StrictHostKeyChecking no" -i ssh_key.pem ubuntu@${{ steps.ec2_instance.outputs.instance_public_ip }}; do | |
sleep 5 | |
done | |
ssh -i ssh_key.pem ubuntu@${{ steps.ec2_instance.outputs.instance_public_ip }} << EOF | |
sudo -i; | |
whoami; | |
curl https://get.docker.com -o docker.sh; | |
chmod +x docker.sh; | |
bash docker.sh; | |
apt install -y python3-pip jq git; | |
pip3 install --upgrade requests; | |
pip3 install --upgrade urllib3; | |
pip3 install docker-compose; | |
EOF | |
scp -i ssh_key.pem cert.pem ubuntu@${{ steps.ec2_instance.outputs.instance_public_ip }}:/tmp/websocket-cert.pem | |
scp -i ssh_key.pem key.pem ubuntu@${{ steps.ec2_instance.outputs.instance_public_ip }}:/tmp/websocket-key.pem | |
- name: Deploy target CloudSDK in EC2 | |
run: | | |
ssh -o "StrictHostKeyChecking no" -i ssh_key.pem ubuntu@${{ steps.ec2_instance.outputs.instance_public_ip }} << EOF | |
sudo -i; | |
git clone https://github.com/Telecominfraproject/wlan-cloud-ucentral-deploy.git; | |
cd wlan-cloud-ucentral-deploy; | |
git checkout ${{ github.event.inputs.sdk_version }}; | |
cd docker-compose; | |
sed "s/#SIMULATORID=/SIMULATORID=$SIMULATORID/" -i owgw.env; | |
cp /tmp/websocket-cert.pem certs/websocket-cert.pem; | |
cp /tmp/websocket-key.pem certs/websocket-key.pem; | |
docker-compose up -d | |
EOF | |
# Deploy CloudSDK with OWLS in K8s | |
- name: Checkout wlan-cloud-ucentral-deploy repo | |
uses: actions/checkout@v3 | |
with: | |
repository: Telecominfraproject/wlan-cloud-ucentral-deploy | |
path: wlan-cloud-ucentral-deploy | |
ref: refs/tags/${{ github.event.inputs.sdk_version }} | |
- name: Get EKS access credentials | |
run: aws eks update-kubeconfig --name ${{ env.AWS_EKS_NAME }} | |
# TODO WIFI-7839 delete when issue is resolved on AWS CLI side | |
- name: install kubectl | |
run: | | |
curl -LO "https://dl.k8s.io/release/v1.23.6/bin/linux/amd64/kubectl" | |
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl | |
- name: Set gateway URL output | |
id: gateway | |
run: echo "url=gw-${{ steps.ec2_facts.outputs.instance_name }}.cicd.lab.wlan.tip.build" >> $GITHUB_OUTPUT | |
- name: Set sec service URL output | |
id: sec | |
run: echo "url=sec-${{ steps.ec2_facts.outputs.instance_name }}.cicd.lab.wlan.tip.build" >> $GITHUB_OUTPUT | |
- name: Set ls service URL output | |
id: ls | |
run: echo "url=ls-${{ steps.ec2_facts.outputs.instance_name }}.cicd.lab.wlan.tip.build" >> $GITHUB_OUTPUT | |
- name: Prepare certificates from secrets | |
working-directory: wlan-cloud-ucentral-deploy/chart/environment-values | |
run: | | |
echo "${{ secrets.DIGICERT_CERT }}" | base64 -d > cert.pem | |
echo "${{ secrets.DIGICERT_KEY }}" | base64 -d > key.pem | |
echo "${{ secrets.LOADSIM_DIGICERT_CERT }}" | base64 -d > device-cert.pem | |
echo "${{ secrets.LOADSIM_DIGICERT_KEY }}" | base64 -d > device-key.pem | |
- name: Deploy CloudSDK instance with load simulator | |
working-directory: wlan-cloud-ucentral-deploy/chart/environment-values | |
run: | | |
export NAMESPACE="${{ steps.ec2_facts.outputs.instance_name }}" | |
export DEPLOY_METHOD=git | |
export CHART_VERSION=${{ github.event.inputs.sdk_version }} | |
export OWGW_VERSION=master | |
export OWGWUI_VERSION=main | |
export OWSEC_VERSION=main | |
export OWFMS_VERSION=main | |
export OWPROV_VERSION=main | |
export OWPROVUI_VERSION=main | |
export OWANALYTICS_VERSION=main | |
export OWSUB_VERSION=main | |
export OWRRM_VERSION=main | |
export VALUES_FILE_LOCATION=values.openwifi-qa.yaml,values.openwifi-qa.test-nodes.yaml,values.openwifi-qa.owls-enabled.yaml | |
export RTTY_TOKEN=${{ secrets.RTTY_TOKEN }} | |
export OWGW_AUTH_USERNAME=${{ secrets.UCENTRALGW_AUTH_USERNAME }} | |
export OWGW_AUTH_PASSWORD=${{ secrets.UCENTRALGW_AUTH_PASSWORD }} | |
export OWFMS_S3_SECRET=${{ secrets.UCENTRALFMS_S3_SECRET }} | |
export OWFMS_S3_KEY=${{ secrets.UCENTRALFMS_S3_KEY }} | |
export CERT_LOCATION=cert.pem | |
export KEY_LOCATION=key.pem | |
export DEVICE_CERT_LOCATION=device-cert.pem | |
export DEVICE_KEY_LOCATION=device-key.pem | |
export OWSEC_NEW_PASSWORD=${{ secrets.OWSEC_NEW_PASSWORD }} | |
export USE_SEPARATE_OWGW_LB=true | |
./deploy.sh | |
# Run tests | |
- name: Checkout OWLS for CLI tool | |
uses: actions/checkout@v3 | |
with: | |
repository: Telecominfraproject/wlan-cloud-owls | |
path: wlan-cloud-owls | |
ref: refs/tags/${{ github.event.inputs.owls_version }} | |
- name: Run simulation | |
working-directory: wlan-cloud-owls/test_scripts/curl | |
run: | | |
export OWGW="${{ steps.ec2_facts.outputs.instance_name }}.cicd.lab.wlan.tip.build:15002" | |
export OWSEC="${{ steps.sec.outputs.url }}:16001" | |
export OWSEC_USERNAME="[email protected]" | |
export OWSEC_PASSWORD="${{ secrets.OWSEC_NEW_PASSWORD }}" | |
echo "[Info] Trying to cache OWLS FQDN in /etc/hosts" | |
export HOST_ENTRY="" | |
until [ ! -z "$HOST_ENTRY" ]; do export HOST_ENTRY=$(getent hosts ${{ steps.ls.outputs.url }}); sleep 1; done; | |
cat /etc/hosts > /tmp/hosts | |
echo "$HOST_ENTRY" >> /tmp/hosts | |
sudo cp /tmp/hosts /etc/hosts | |
echo "[Info] DNS record for ${{ steps.ls.outputs.url }} resolved successfully!" | |
cat /etc/hosts | |
cat > input_sim_info.json <<EOF | |
{ | |
"name":"test", | |
"deviceType":"edgecore_ecw5410", | |
"devices":${{ github.event.inputs.devices_count }}, | |
"gateway":"https://$OWGW", | |
"macPrefix":"030000", | |
"simulationLength":${{ github.event.inputs.simulation_lenght }} | |
} | |
EOF | |
echo "[Info] Simulation definition" | |
cat input_sim_info.json | jq . | |
echo "[Info] Creating simulation" | |
export SIMULATION_ID="null" | |
while [[ "$SIMULATION_ID" == "null" ]] || [[ "$SIMULATION_ID" == "" ]]; do | |
./cli createsim input_sim_info.json || true | |
export SIMULATION_ID=$(cat result.json | jq '.id' -r) | |
echo "[Info] Simulation ID from result file - $SIMULATION_ID" | |
done | |
cat result.json | jq . | |
echo "[Info] Starting simulation" | |
./cli startsim $SIMULATION_ID | |
cat result.json | jq . | |
echo "[Info] Waiting for simulation to end" | |
./cli getsimstats > /dev/null | |
export SIM_STATE=$(cat result.json | jq '.state' -r) | |
until [[ "$SIM_STATE" == "completed" ]]; do | |
sleep 10 | |
./cli getsimstats > /dev/null | |
export SIM_STATE=$(cat result.json | jq '.state' -r) | |
done | |
echo | |
echo "[Info] Final results:" | |
cat result.json | jq . | |
# Delete CloudSDK with OWLS in K8s | |
- name: Show resource state on deployment failure | |
if: failure() | |
run: | | |
kubectl get pods --namespace openwifi-${{ steps.ec2_facts.outputs.instance_name }} | |
kubectl get services --namespace openwifi-${{ steps.ec2_facts.outputs.instance_name }} | |
kubectl get persistentvolumeclaims --namespace openwifi-${{ steps.ec2_facts.outputs.instance_name }} | |
- name: Describe pods on deployment failure | |
if: failure() | |
run: | | |
kubectl describe pods --namespace openwifi-${{ steps.ec2_facts.outputs.instance_name }} | |
- name: Describe services on deployment failure | |
if: failure() | |
run: | | |
kubectl describe services --namespace openwifi-${{ steps.ec2_facts.outputs.instance_name }} | |
- name: Describe persistentvolumeclaims on deployment failure | |
if: failure() | |
run: | | |
kubectl describe persistentvolumeclaims --namespace openwifi-${{ steps.ec2_facts.outputs.instance_name }} | |
- name: Cleanup | |
if: always() | |
run: | | |
helm delete -n openwifi-${{ steps.ec2_facts.outputs.instance_name }} tip-openwifi || true | |
kubectl delete ns openwifi-"${{ steps.ec2_facts.outputs.instance_name }}" --wait=true | |
# Delete EC2 infrastructure | |
- name: Delete Route53 record | |
if: always() | |
run: | | |
cat > changeset.json << EOF | |
{ | |
"Comment": "Deleting A for ${{ steps.ec2_facts.outputs.instance_name }}", | |
"Changes": [{ | |
"Action": "DELETE", | |
"ResourceRecordSet": { | |
"Name": "${{ steps.ec2_facts.outputs.instance_name }}.cicd.lab.wlan.tip.build", | |
"Type": "A", | |
"TTL": 600, | |
"ResourceRecords":[{ | |
"Value": "${{ steps.ec2_instance.outputs.instance_public_ip }}" | |
}]} | |
}] | |
} | |
EOF | |
aws route53 change-resource-record-sets --hosted-zone-id $ROUTE_53_ZONE_ID --change-batch file://changeset.json | |
- name: Delete EC2 instance | |
if: always() | |
run: | | |
aws ec2 terminate-instances --instance-ids ${{ steps.ec2_instance.outputs.instance_id }} | |
docker-compose-psql: | |
runs-on: ubuntu-latest | |
needs: | |
- docker-compose-sqlite | |
steps: | |
- name: Set EC2 facts | |
id: ec2_facts | |
run: | | |
AMI=$(aws ec2 describe-images --filters '[{"Name":"description","Values":["Canonical, Ubuntu, 20.04 LTS, amd64*"]},{"Name":"owner-id","Values":["099720109477"]}]' --query 'sort_by(Images, &CreationDate)[-1].ImageId' --output text) | |
INSTANCE_NAME=owgw-dc-psql-${{ github.run_number }} | |
echo "ami=${AMI}" >> $GITHUB_OUTPUT | |
echo "instance_name=${INSTANCE_NAME}" >> $GITHUB_OUTPUT | |
# Create EC2 infrastructure | |
- name: Create EC2 instance for CloudSDK | |
id: ec2_instance | |
run: | | |
aws ec2 run-instances --key-name $EC2_KEY_NAME --subnet-id $VPC_SUBNET_ID --security-group-ids $EC2_SECURITY_GROUP_ID --instance-type $EC2_INSTANCE_TYPE --image-id ${{ steps.ec2_facts.outputs.ami }} --tag-specifications "ResourceType=instance,Tags=[{Key=Name,Value=${{ steps.ec2_facts.outputs.instance_name }}},{Key=Owner,Value=gha-wlan-testing}]" --output text | |
INSTANCE_PUBLIC_IP=$(aws ec2 describe-instances --filters "Name=tag:Name,Values=${{ steps.ec2_facts.outputs.instance_name }}" --query 'Reservations[*].Instances[*].PublicIpAddress' --output text) | |
INSTANCE_ID=$(aws ec2 describe-instances --filters "Name=tag:Name,Values=${{ steps.ec2_facts.outputs.instance_name }}" --query 'Reservations[*].Instances[*].InstanceId' --output text) | |
echo "instance_public_ip=${INSTANCE_PUBLIC_IP}" >> $GITHUB_OUTPUT | |
echo "instance_id=${INSTANCE_ID}" >> $GITHUB_OUTPUT | |
- name: Create Route53 record | |
run: | | |
cat > changeset.json << EOF | |
{ | |
"Comment": "Creating A for ${{ steps.ec2_facts.outputs.instance_name }}", | |
"Changes": [{ | |
"Action": "CREATE", | |
"ResourceRecordSet": { | |
"Name": "${{ steps.ec2_facts.outputs.instance_name }}.cicd.lab.wlan.tip.build", | |
"Type": "A", | |
"TTL": 600, | |
"ResourceRecords":[{ | |
"Value": "${{ steps.ec2_instance.outputs.instance_public_ip }}" | |
}]} | |
}] | |
} | |
EOF | |
aws route53 change-resource-record-sets --hosted-zone-id $ROUTE_53_ZONE_ID --change-batch file://changeset.json | |
# Deploy target CloudSDK into EC2 instance | |
- name: Get DigiCert certificates | |
run: | | |
echo "${{ secrets.DIGICERT_CERT }}" | base64 -d > cert.pem | |
echo "${{ secrets.DIGICERT_KEY }}" | base64 -d > key.pem | |
- name: Save SSH key for access to EC2 instance | |
run: | | |
echo "${{ secrets.SSH_LOADSIM }}" > ssh_key.pem | |
chmod 600 ssh_key.pem | |
- name: Try connecting to EC2 instance | |
run: | | |
until ssh -o "StrictHostKeyChecking no" -i ssh_key.pem ubuntu@${{ steps.ec2_instance.outputs.instance_public_ip }}; do | |
sleep 5 | |
done | |
ssh -i ssh_key.pem ubuntu@${{ steps.ec2_instance.outputs.instance_public_ip }} << EOF | |
sudo -i; | |
whoami; | |
curl https://get.docker.com -o docker.sh; | |
chmod +x docker.sh; | |
bash docker.sh; | |
apt install -y python3-pip jq git; | |
pip3 install --upgrade requests; | |
pip3 install --upgrade urllib3; | |
pip3 install docker-compose; | |
EOF | |
scp -i ssh_key.pem cert.pem ubuntu@${{ steps.ec2_instance.outputs.instance_public_ip }}:/tmp/websocket-cert.pem | |
scp -i ssh_key.pem key.pem ubuntu@${{ steps.ec2_instance.outputs.instance_public_ip }}:/tmp/websocket-key.pem | |
- name: Deploy target CloudSDK in EC2 | |
run: | | |
ssh -o "StrictHostKeyChecking no" -i ssh_key.pem ubuntu@${{ steps.ec2_instance.outputs.instance_public_ip }} << EOF | |
sudo -i; | |
git clone https://github.com/Telecominfraproject/wlan-cloud-ucentral-deploy.git; | |
cd wlan-cloud-ucentral-deploy; | |
git checkout ${{ github.event.inputs.sdk_version }}; | |
cd docker-compose; | |
sed "s/#SIMULATORID=/SIMULATORID=$SIMULATORID/" -i owgw.env; | |
sed 's/#STORAGE_TYPE_POSTGRESQL_HOST=.*/STORAGE_TYPE_POSTGRESQL_HOST=postgresql/' -i owgw.env; | |
sed 's/#STORAGE_TYPE=.*/STORAGE_TYPE=postgresql/' -i owgw.env; | |
cp /tmp/websocket-cert.pem certs/websocket-cert.pem; | |
cp /tmp/websocket-key.pem certs/websocket-key.pem; | |
docker-compose --file docker-compose.yml --file docker-compose.postgresql.yml up -d | |
EOF | |
# Deploy CloudSDK with OWLS in K8s | |
- name: Checkout wlan-cloud-ucentral-deploy repo | |
uses: actions/checkout@v3 | |
with: | |
repository: Telecominfraproject/wlan-cloud-ucentral-deploy | |
path: wlan-cloud-ucentral-deploy | |
ref: refs/tags/${{ github.event.inputs.sdk_version }} | |
- name: Get EKS access credentials | |
run: aws eks update-kubeconfig --name ${{ env.AWS_EKS_NAME }} | |
# TODO WIFI-7839 delete when issue is resolved on AWS CLI side | |
- name: install kubectl | |
run: | | |
curl -LO "https://dl.k8s.io/release/v1.23.6/bin/linux/amd64/kubectl" | |
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl | |
- name: Set gateway URL output | |
id: gateway | |
run: echo "url=gw-${{ steps.ec2_facts.outputs.instance_name }}.cicd.lab.wlan.tip.build" >> $GITHUB_OUTPUT | |
- name: Set sec service URL output | |
id: sec | |
run: echo "url=sec-${{ steps.ec2_facts.outputs.instance_name }}.cicd.lab.wlan.tip.build" >> $GITHUB_OUTPUT | |
- name: Set ls service URL output | |
id: ls | |
run: echo "url=ls-${{ steps.ec2_facts.outputs.instance_name }}.cicd.lab.wlan.tip.build" >> $GITHUB_OUTPUT | |
- name: Prepare certificates from secrets | |
working-directory: wlan-cloud-ucentral-deploy/chart/environment-values | |
run: | | |
echo "${{ secrets.DIGICERT_CERT }}" | base64 -d > cert.pem | |
echo "${{ secrets.DIGICERT_KEY }}" | base64 -d > key.pem | |
echo "${{ secrets.LOADSIM_DIGICERT_CERT }}" | base64 -d > device-cert.pem | |
echo "${{ secrets.LOADSIM_DIGICERT_KEY }}" | base64 -d > device-key.pem | |
- name: Deploy CloudSDK instance with load simulator | |
working-directory: wlan-cloud-ucentral-deploy/chart/environment-values | |
run: | | |
export NAMESPACE="${{ steps.ec2_facts.outputs.instance_name }}" | |
export DEPLOY_METHOD=git | |
export CHART_VERSION=${{ github.event.inputs.sdk_version }} | |
export OWGW_VERSION=master | |
export OWGWUI_VERSION=main | |
export OWSEC_VERSION=main | |
export OWFMS_VERSION=main | |
export OWPROV_VERSION=main | |
export OWPROVUI_VERSION=main | |
export OWANALYTICS_VERSION=main | |
export OWSUB_VERSION=main | |
export OWRRM_VERSION=main | |
export VALUES_FILE_LOCATION=values.openwifi-qa.yaml,values.openwifi-qa.test-nodes.yaml,values.openwifi-qa.owls-enabled.yaml | |
export RTTY_TOKEN=${{ secrets.RTTY_TOKEN }} | |
export OWGW_AUTH_USERNAME=${{ secrets.UCENTRALGW_AUTH_USERNAME }} | |
export OWGW_AUTH_PASSWORD=${{ secrets.UCENTRALGW_AUTH_PASSWORD }} | |
export OWFMS_S3_SECRET=${{ secrets.UCENTRALFMS_S3_SECRET }} | |
export OWFMS_S3_KEY=${{ secrets.UCENTRALFMS_S3_KEY }} | |
export CERT_LOCATION=cert.pem | |
export KEY_LOCATION=key.pem | |
export DEVICE_CERT_LOCATION=device-cert.pem | |
export DEVICE_KEY_LOCATION=device-key.pem | |
export OWSEC_NEW_PASSWORD=${{ secrets.OWSEC_NEW_PASSWORD }} | |
export USE_SEPARATE_OWGW_LB=true | |
./deploy.sh | |
# Run tests | |
- name: Checkout OWLS for CLI tool | |
uses: actions/checkout@v3 | |
with: | |
repository: Telecominfraproject/wlan-cloud-owls | |
path: wlan-cloud-owls | |
ref: refs/tags/${{ github.event.inputs.owls_version }} | |
- name: Run simulation | |
working-directory: wlan-cloud-owls/test_scripts/curl | |
run: | | |
export OWGW="${{ steps.ec2_facts.outputs.instance_name }}.cicd.lab.wlan.tip.build:15002" | |
export OWSEC="${{ steps.sec.outputs.url }}:16001" | |
export OWSEC_USERNAME="[email protected]" | |
export OWSEC_PASSWORD="${{ secrets.OWSEC_NEW_PASSWORD }}" | |
echo "[Info] Trying to cache OWLS FQDN in /etc/hosts" | |
export HOST_ENTRY="" | |
until [ ! -z "$HOST_ENTRY" ]; do export HOST_ENTRY=$(getent hosts ${{ steps.ls.outputs.url }}); sleep 1; done; | |
cat /etc/hosts > /tmp/hosts | |
echo "$HOST_ENTRY" >> /tmp/hosts | |
sudo cp /tmp/hosts /etc/hosts | |
echo "[Info] DNS record for ${{ steps.ls.outputs.url }} resolved successfully!" | |
cat /etc/hosts | |
cat > input_sim_info.json <<EOF | |
{ | |
"name":"test", | |
"deviceType":"edgecore_ecw5410", | |
"devices":${{ github.event.inputs.devices_count }}, | |
"gateway":"https://$OWGW", | |
"macPrefix":"030000", | |
"simulationLength":${{ github.event.inputs.simulation_lenght }} | |
} | |
EOF | |
echo "[Info] Simulation definition" | |
cat input_sim_info.json | jq . | |
echo "[Info] Creating simulation" | |
export SIMULATION_ID="null" | |
while [[ "$SIMULATION_ID" == "null" ]] || [[ "$SIMULATION_ID" == "" ]]; do | |
./cli createsim input_sim_info.json || true | |
export SIMULATION_ID=$(cat result.json | jq '.id' -r) | |
echo "[Info] Simulation ID from result file - $SIMULATION_ID" | |
done | |
cat result.json | jq . | |
echo "[Info] Starting simulation" | |
./cli startsim $SIMULATION_ID | |
cat result.json | jq . | |
echo "[Info] Waiting for simulation to end" | |
./cli getsimstats > /dev/null | |
export SIM_STATE=$(cat result.json | jq '.state' -r) | |
until [[ "$SIM_STATE" == "completed" ]]; do | |
sleep 10 | |
./cli getsimstats > /dev/null | |
export SIM_STATE=$(cat result.json | jq '.state' -r) | |
done | |
echo | |
echo "[Info] Final results:" | |
cat result.json | jq . | |
# Delete CloudSDK with OWLS in K8s | |
- name: Show resource state on deployment failure | |
if: failure() | |
run: | | |
kubectl get pods --namespace openwifi-${{ steps.ec2_facts.outputs.instance_name }} | |
kubectl get services --namespace openwifi-${{ steps.ec2_facts.outputs.instance_name }} | |
kubectl get persistentvolumeclaims --namespace openwifi-${{ steps.ec2_facts.outputs.instance_name }} | |
- name: Describe pods on deployment failure | |
if: failure() | |
run: | | |
kubectl describe pods --namespace openwifi-${{ steps.ec2_facts.outputs.instance_name }} | |
- name: Describe services on deployment failure | |
if: failure() | |
run: | | |
kubectl describe services --namespace openwifi-${{ steps.ec2_facts.outputs.instance_name }} | |
- name: Describe persistentvolumeclaims on deployment failure | |
if: failure() | |
run: | | |
kubectl describe persistentvolumeclaims --namespace openwifi-${{ steps.ec2_facts.outputs.instance_name }} | |
- name: Cleanup | |
if: always() | |
run: | | |
helm delete -n openwifi-${{ steps.ec2_facts.outputs.instance_name }} tip-openwifi || true | |
kubectl delete ns openwifi-"${{ steps.ec2_facts.outputs.instance_name }}" --wait=true | |
# Delete EC2 infrastructure | |
- name: Delete Route53 record | |
if: always() | |
run: | | |
cat > changeset.json << EOF | |
{ | |
"Comment": "Deleting A for ${{ steps.ec2_facts.outputs.instance_name }}", | |
"Changes": [{ | |
"Action": "DELETE", | |
"ResourceRecordSet": { | |
"Name": "${{ steps.ec2_facts.outputs.instance_name }}.cicd.lab.wlan.tip.build", | |
"Type": "A", | |
"TTL": 600, | |
"ResourceRecords":[{ | |
"Value": "${{ steps.ec2_instance.outputs.instance_public_ip }}" | |
}]} | |
}] | |
} | |
EOF | |
aws route53 change-resource-record-sets --hosted-zone-id $ROUTE_53_ZONE_ID --change-batch file://changeset.json | |
- name: Delete EC2 instance | |
if: always() | |
run: | | |
aws ec2 terminate-instances --instance-ids ${{ steps.ec2_instance.outputs.instance_id }} | |
kubernetes-sqlite: | |
runs-on: ubuntu-latest | |
needs: | |
- docker-compose-sqlite | |
- docker-compose-psql | |
steps: | |
- name: Checkout wlan-cloud-ucentral-deploy repo | |
uses: actions/checkout@v3 | |
with: | |
repository: Telecominfraproject/wlan-cloud-ucentral-deploy | |
path: wlan-cloud-ucentral-deploy | |
ref: refs/tags/${{ github.event.inputs.sdk_version }} | |
- name: Get EKS access credentials | |
run: aws eks update-kubeconfig --name ${{ env.AWS_EKS_NAME }} | |
# TODO WIFI-7839 delete when issue is resolved on AWS CLI side | |
- name: install kubectl | |
run: | | |
curl -LO "https://dl.k8s.io/release/v1.23.6/bin/linux/amd64/kubectl" | |
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl | |
- name: Prepare namespace | |
id: namespace | |
run: | | |
NAMESPACE="ls-sqlite-${{ github.run_number }}" | |
kubectl create ns openwifi-$NAMESPACE | |
kubectl config set-context --current --namespace=openwifi-$NAMESPACE | |
echo "namespace=${NAMESPACE}" >> $GITHUB_OUTPUT | |
- name: Set gateway URL output | |
id: gateway | |
run: echo "url=gw-${{ steps.namespace.outputs.namespace }}.cicd.lab.wlan.tip.build" >> $GITHUB_OUTPUT | |
- name: Set sec service URL output | |
id: sec | |
run: echo "url=sec-${{ steps.namespace.outputs.namespace }}.cicd.lab.wlan.tip.build" >> $GITHUB_OUTPUT | |
- name: Set ls service URL output | |
id: ls | |
run: echo "url=ls-${{ steps.namespace.outputs.namespace }}.cicd.lab.wlan.tip.build" >> $GITHUB_OUTPUT | |
- name: Prepare certificates from secrets | |
working-directory: wlan-cloud-ucentral-deploy/chart/environment-values | |
run: | | |
echo "${{ secrets.DIGICERT_CERT }}" | base64 -d > cert.pem | |
echo "${{ secrets.DIGICERT_KEY }}" | base64 -d > key.pem | |
echo "${{ secrets.LOADSIM_DIGICERT_CERT }}" | base64 -d > device-cert.pem | |
echo "${{ secrets.LOADSIM_DIGICERT_KEY }}" | base64 -d > device-key.pem | |
- name: Deploy CloudSDK instance with load simulator | |
working-directory: wlan-cloud-ucentral-deploy/chart/environment-values | |
run: | | |
export NAMESPACE="${{ steps.namespace.outputs.namespace }}" | |
export DEPLOY_METHOD=git | |
export CHART_VERSION="${{ github.event.inputs.sdk_version }}" | |
export OWGW_VERSION=master | |
export OWGWUI_VERSION=main | |
export OWSEC_VERSION=main | |
export OWFMS_VERSION=main | |
export OWPROV_VERSION=main | |
export OWPROVUI_VERSION=main | |
export OWANALYTICS_VERSION=main | |
export OWSUB_VERSION=main | |
export OWRRM_VERSION=main | |
export VALUES_FILE_LOCATION=values.openwifi-qa.yaml,values.openwifi-qa.test-nodes.yaml,values.openwifi-qa.owls-enabled.yaml | |
export RTTY_TOKEN=${{ secrets.RTTY_TOKEN }} | |
export OWGW_AUTH_USERNAME=${{ secrets.UCENTRALGW_AUTH_USERNAME }} | |
export OWGW_AUTH_PASSWORD=${{ secrets.UCENTRALGW_AUTH_PASSWORD }} | |
export OWFMS_S3_SECRET=${{ secrets.UCENTRALFMS_S3_SECRET }} | |
export OWFMS_S3_KEY=${{ secrets.UCENTRALFMS_S3_KEY }} | |
export CERT_LOCATION=cert.pem | |
export KEY_LOCATION=key.pem | |
export DEVICE_CERT_LOCATION=device-cert.pem | |
export DEVICE_KEY_LOCATION=device-key.pem | |
export OWSEC_NEW_PASSWORD=${{ secrets.OWSEC_NEW_PASSWORD }} | |
export USE_SEPARATE_OWGW_LB=true | |
./deploy.sh | |
- name: Checkout OWLS for CLI tool | |
uses: actions/checkout@v3 | |
with: | |
repository: Telecominfraproject/wlan-cloud-owls | |
path: wlan-cloud-owls | |
ref: refs/tags/${{ github.event.inputs.owls_version }} | |
- name: Run simulation | |
working-directory: wlan-cloud-owls/test_scripts/curl | |
run: | | |
export OWGW="${{ steps.gateway.outputs.url }}:15002" | |
export OWSEC="${{ steps.sec.outputs.url }}:16001" | |
export OWSEC_USERNAME="[email protected]" | |
export OWSEC_PASSWORD="${{ secrets.OWSEC_NEW_PASSWORD }}" | |
echo "[Info] Trying to cache OWLS FQDN in /etc/hosts" | |
export HOST_ENTRY="" | |
until [ ! -z "$HOST_ENTRY" ]; do export HOST_ENTRY=$(getent hosts ${{ steps.ls.outputs.url }}); sleep 1; done; | |
cat /etc/hosts > /tmp/hosts | |
echo "$HOST_ENTRY" >> /tmp/hosts | |
sudo cp /tmp/hosts /etc/hosts | |
echo "[Info] DNS record for ${{ steps.ls.outputs.url }} resolved successfully!" | |
cat /etc/hosts | |
cat > input_sim_info.json <<EOF | |
{ | |
"name":"test", | |
"deviceType":"edgecore_ecw5410", | |
"devices":${{ github.event.inputs.devices_count }}, | |
"gateway":"https://$OWGW", | |
"macPrefix":"030000", | |
"simulationLength":${{ github.event.inputs.simulation_lenght }} | |
} | |
EOF | |
echo "[Info] Simulation definition" | |
cat input_sim_info.json | jq . | |
echo "[Info] Creating simulation" | |
export SIMULATION_ID="null" | |
while [[ "$SIMULATION_ID" == "null" ]] || [[ "$SIMULATION_ID" == "" ]]; do | |
./cli createsim input_sim_info.json || true | |
export SIMULATION_ID=$(cat result.json | jq '.id' -r) | |
echo "[Info] Simulation ID from result file - $SIMULATION_ID" | |
done | |
cat result.json | jq . | |
echo "[Info] Starting simulation" | |
./cli startsim $SIMULATION_ID | |
cat result.json | jq . | |
echo "[Info] Waiting for simulation to end" | |
./cli getsimstats > /dev/null | |
export SIM_STATE=$(cat result.json | jq '.state' -r) | |
until [[ "$SIM_STATE" == "completed" ]]; do | |
sleep 10 | |
./cli getsimstats > /dev/null | |
export SIM_STATE=$(cat result.json | jq '.state' -r) | |
done | |
echo | |
echo "[Info] Final results:" | |
cat result.json | jq . | |
- name: Show resource state on deployment failure | |
if: failure() | |
run: | | |
kubectl get pods --namespace openwifi-${{ steps.namespace.outputs.namespace }} | |
kubectl get services --namespace openwifi-${{ steps.namespace.outputs.namespace }} | |
kubectl get persistentvolumeclaims --namespace openwifi-${{ steps.namespace.outputs.namespace }} | |
- name: Describe pods on deployment failure | |
if: failure() | |
run: | | |
kubectl describe pods --namespace openwifi-${{ steps.namespace.outputs.namespace }} | |
- name: Describe services on deployment failure | |
if: failure() | |
run: | | |
kubectl describe services --namespace openwifi-${{ steps.namespace.outputs.namespace }} | |
- name: Describe persistentvolumeclaims on deployment failure | |
if: failure() | |
run: | | |
kubectl describe persistentvolumeclaims --namespace openwifi-${{ steps.namespace.outputs.namespace }} | |
- name: Cleanup | |
if: always() | |
run: | | |
helm delete -n openwifi-${{ steps.namespace.outputs.namespace }} tip-openwifi || true | |
kubectl delete ns openwifi-"${{ steps.namespace.outputs.namespace }}" --wait=true | |
kubernetes-psql: | |
runs-on: ubuntu-latest | |
needs: | |
- docker-compose-sqlite | |
- docker-compose-psql | |
- kubernetes-sqlite | |
steps: | |
- name: Checkout wlan-cloud-ucentral-deploy repo | |
uses: actions/checkout@v3 | |
with: | |
repository: Telecominfraproject/wlan-cloud-ucentral-deploy | |
path: wlan-cloud-ucentral-deploy | |
ref: refs/tags/${{ github.event.inputs.sdk_version }} | |
- name: Get EKS access credentials | |
run: aws eks update-kubeconfig --name ${{ env.AWS_EKS_NAME }} | |
# TODO WIFI-7839 delete when issue is resolved on AWS CLI side | |
- name: install kubectl | |
run: | | |
curl -LO "https://dl.k8s.io/release/v1.23.6/bin/linux/amd64/kubectl" | |
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl | |
- name: Prepare namespace | |
id: namespace | |
run: | | |
NAMESPACE="ls-psql-${{ github.run_number }}" | |
kubectl create ns openwifi-$NAMESPACE | |
kubectl config set-context --current --namespace=openwifi-$NAMESPACE | |
echo "namespace=${NAMESPACE}" >> $GITHUB_OUTPUT | |
- name: Set gateway URL output | |
id: gateway | |
run: echo "url=gw-${{ steps.namespace.outputs.namespace }}.cicd.lab.wlan.tip.build" >> $GITHUB_OUTPUT | |
- name: Set sec service URL output | |
id: sec | |
run: echo "url=sec-${{ steps.namespace.outputs.namespace }}.cicd.lab.wlan.tip.build" >> $GITHUB_OUTPUT | |
- name: Set ls service URL output | |
id: ls | |
run: echo "url=ls-${{ steps.namespace.outputs.namespace }}.cicd.lab.wlan.tip.build" >> $GITHUB_OUTPUT | |
- name: Prepare certificates from secrets | |
working-directory: wlan-cloud-ucentral-deploy/chart/environment-values | |
run: | | |
echo "${{ secrets.DIGICERT_CERT }}" | base64 -d > cert.pem | |
echo "${{ secrets.DIGICERT_KEY }}" | base64 -d > key.pem | |
echo "${{ secrets.LOADSIM_DIGICERT_CERT }}" | base64 -d > device-cert.pem | |
echo "${{ secrets.LOADSIM_DIGICERT_KEY }}" | base64 -d > device-key.pem | |
- name: Deploy CloudSDK instance with load simulator | |
working-directory: wlan-cloud-ucentral-deploy/chart/environment-values | |
run: | | |
export NAMESPACE="${{ steps.namespace.outputs.namespace }}" | |
export DEPLOY_METHOD=git | |
export CHART_VERSION="${{ github.event.inputs.sdk_version }}" | |
export OWGW_VERSION=master | |
export OWGWUI_VERSION=main | |
export OWSEC_VERSION=main | |
export OWFMS_VERSION=main | |
export OWPROV_VERSION=main | |
export OWPROVUI_VERSION=main | |
export OWANALYTICS_VERSION=main | |
export OWSUB_VERSION=main | |
export OWRRM_VERSION=main | |
export VALUES_FILE_LOCATION=values.openwifi-qa.yaml,values.openwifi-qa.test-nodes.yaml,values.openwifi-qa.owls-enabled.yaml,values.openwifi-qa.external-db.yaml | |
export RTTY_TOKEN=${{ secrets.RTTY_TOKEN }} | |
export OWGW_AUTH_USERNAME=${{ secrets.UCENTRALGW_AUTH_USERNAME }} | |
export OWGW_AUTH_PASSWORD=${{ secrets.UCENTRALGW_AUTH_PASSWORD }} | |
export OWFMS_S3_SECRET=${{ secrets.UCENTRALFMS_S3_SECRET }} | |
export OWFMS_S3_KEY=${{ secrets.UCENTRALFMS_S3_KEY }} | |
export CERT_LOCATION=cert.pem | |
export KEY_LOCATION=key.pem | |
export DEVICE_CERT_LOCATION=device-cert.pem | |
export DEVICE_KEY_LOCATION=device-key.pem | |
export OWSEC_NEW_PASSWORD=${{ secrets.OWSEC_NEW_PASSWORD }} | |
export USE_SEPARATE_OWGW_LB=true | |
./deploy.sh | |
- name: Checkout OWLS for CLI tool | |
uses: actions/checkout@v3 | |
with: | |
repository: Telecominfraproject/wlan-cloud-owls | |
path: wlan-cloud-owls | |
ref: refs/tags/${{ github.event.inputs.owls_version }} | |
- name: Run simulation | |
working-directory: wlan-cloud-owls/test_scripts/curl | |
run: | | |
export OWGW="${{ steps.gateway.outputs.url }}:15002" | |
export OWSEC="${{ steps.sec.outputs.url }}:16001" | |
export OWSEC_USERNAME="[email protected]" | |
export OWSEC_PASSWORD="${{ secrets.OWSEC_NEW_PASSWORD }}" | |
echo "[Info] Trying to cache OWLS FQDN in /etc/hosts" | |
export HOST_ENTRY="" | |
until [ ! -z "$HOST_ENTRY" ]; do export HOST_ENTRY=$(getent hosts ${{ steps.ls.outputs.url }}); sleep 1; done; | |
cat /etc/hosts > /tmp/hosts | |
echo "$HOST_ENTRY" >> /tmp/hosts | |
sudo cp /tmp/hosts /etc/hosts | |
echo "[Info] DNS record for ${{ steps.ls.outputs.url }} resolved successfully!" | |
cat /etc/hosts | |
cat > input_sim_info.json <<EOF | |
{ | |
"name":"test", | |
"deviceType":"edgecore_ecw5410", | |
"devices":${{ github.event.inputs.devices_count }}, | |
"gateway":"https://$OWGW", | |
"macPrefix":"030000", | |
"simulationLength":${{ github.event.inputs.simulation_lenght }} | |
} | |
EOF | |
echo "[Info] Simulation definition" | |
cat input_sim_info.json | jq . | |
echo "[Info] Creating simulation" | |
export SIMULATION_ID="null" | |
while [[ "$SIMULATION_ID" == "null" ]] || [[ "$SIMULATION_ID" == "" ]]; do | |
./cli createsim input_sim_info.json || true | |
export SIMULATION_ID=$(cat result.json | jq '.id' -r) | |
echo "[Info] Simulation ID from result file - $SIMULATION_ID" | |
done | |
cat result.json | jq . | |
echo "[Info] Starting simulation" | |
./cli startsim $SIMULATION_ID | |
cat result.json | jq . | |
echo "[Info] Waiting for simulation to end" | |
./cli getsimstats > /dev/null | |
export SIM_STATE=$(cat result.json | jq '.state' -r) | |
until [[ "$SIM_STATE" == "completed" ]]; do | |
sleep 10 | |
./cli getsimstats > /dev/null | |
export SIM_STATE=$(cat result.json | jq '.state' -r) | |
done | |
echo | |
echo "[Info] Final results:" | |
cat result.json | jq . | |
- name: Show resource state on deployment failure | |
if: failure() | |
run: | | |
kubectl get pods --namespace openwifi-${{ steps.namespace.outputs.namespace }} | |
kubectl get services --namespace openwifi-${{ steps.namespace.outputs.namespace }} | |
kubectl get persistentvolumeclaims --namespace openwifi-${{ steps.namespace.outputs.namespace }} | |
- name: Describe pods on deployment failure | |
if: failure() | |
run: | | |
kubectl describe pods --namespace openwifi-${{ steps.namespace.outputs.namespace }} | |
- name: Describe services on deployment failure | |
if: failure() | |
run: | | |
kubectl describe services --namespace openwifi-${{ steps.namespace.outputs.namespace }} | |
- name: Describe persistentvolumeclaims on deployment failure | |
if: failure() | |
run: | | |
kubectl describe persistentvolumeclaims --namespace openwifi-${{ steps.namespace.outputs.namespace }} | |
- name: Cleanup | |
if: always() | |
run: | | |
helm delete -n openwifi-${{ steps.namespace.outputs.namespace }} tip-openwifi || true | |
kubectl delete ns openwifi-"${{ steps.namespace.outputs.namespace }}" --wait=true |