Skip to content

Commit 07cac57

Browse files
authored
Merge pull request #1 from sayantan1413/sayantan1413/pattern-action
Added the basics of the gh action
2 parents 2fac991 + ea6c6e5 commit 07cac57

File tree

5 files changed

+287
-0
lines changed

5 files changed

+287
-0
lines changed

action.yml

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
name: "Service Mesh Pattern Testing with Meshery"
2+
description: "Importing Pattern to Meshery"
3+
author: "Layer5"
4+
inputs:
5+
provider_token:
6+
description: "Provider token to use. NOTE: value of the 'token' key in auth.json"
7+
service_mesh:
8+
# used for provisioning appropriate meshery-adatper
9+
description: "Service mesh to use. e.g: osm, istio etc"
10+
required: true
11+
platform:
12+
description: "Platform to deploy meshery on. Possible values: docker, kubernetes"
13+
default: docker
14+
url:
15+
description: "A raw Github URL for the patterns to be deployed"
16+
default: "https://raw.githubusercontent.com/service-mesh-patterns/service-mesh-patterns/master/samples/IstioFilterPattern.yaml"
17+
runs:
18+
using: "node12"
19+
main: "main.js"
20+
branding:
21+
icon: 'check-circle'
22+
color: 'green'

main.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
const spawnSync = require('child_process').spawnSync;
2+
const path = require("path");
3+
4+
const proc = spawnSync('bash', [path.join(__dirname, 'main.sh')], {stdio: 'inherit'});
5+
process.exit(proc.status)

main.sh

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
#!/usr/bin/env bash
2+
3+
set -o errexit
4+
set -o nounset
5+
set -o pipefail
6+
7+
SCRIPT_DIR=$(dirname -- "$(readlink -f "${BASH_SOURCE[0]}" || realpath "${BASH_SOURCE[0]}")")
8+
9+
# Short names
10+
declare -A meshName
11+
meshName["open_service_mesh"]=osm
12+
meshName["traefik_mesh"]=traefik-mesh
13+
meshName["network_service_mesh"]=nsm
14+
15+
main() {
16+
local INPUT_SERVICE_MESH="istio"
17+
get_dependencies
18+
19+
setupArgs=()
20+
if [[ -n "${INPUT_PROVIDER_TOKEN:-}" ]]; then
21+
setupArgs+=(--provider-token ${INPUT_PROVIDER_TOKEN})
22+
fi
23+
24+
if [[ -n "${INPUT_PLATFORM:-}" ]]; then
25+
setupArgs+=(--platform ${INPUT_PLATFORM})
26+
fi
27+
28+
if [[ -n "${INPUT_SERVICE_MESH:-}" ]]; then
29+
meshNameLower=`echo $INPUT_SERVICE_MESH | tr -d '"' | tr '[:upper:]' '[:lower:]'`
30+
if [ $meshNameLower = "open_service_mesh" ] || [ $meshNameLower = "traefik_mesh" ] || [ $meshNameLower = "network_service_mesh" ]
31+
then
32+
serviceMeshAbb=${meshName["$meshNameLower"]}
33+
else
34+
serviceMeshAbb=$meshNameLower
35+
fi
36+
setupArgs+=(--service-mesh ${serviceMeshAbb})
37+
fi
38+
39+
bash "$SCRIPT_DIR/meshery.sh" "${setupArgs[@]}"
40+
41+
commandArgs=()
42+
if [[ -n "${INPUT_PATTERN_FILENAME:-}" ]]; then
43+
commandArgs=(--pattern-filename ${INPUT_PATTERN_FILENAME})
44+
fi
45+
46+
if [[ -n "${INPUT_PATTERN_NAME:-}" ]]; then
47+
commandArgs=(--pattern-name ${INPUT_PATTERN_NAME})
48+
fi
49+
50+
if [[ -n "${INPUT_SERVICE_MESH:-}" ]]; then
51+
commandArgs+=(--service-mesh ${meshNameLower})
52+
fi
53+
54+
bash "$SCRIPT_DIR/mesheryctl.sh" "${commandArgs[@]}"
55+
}
56+
57+
get_dependencies() {
58+
sudo wget https://github.com/mikefarah/yq/releases/download/v4.10.0/yq_linux_amd64 -O /usr/bin/yq --quiet
59+
sudo chmod +x /usr/bin/yq
60+
}
61+
62+
main

meshery.sh

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
#!/usr/bin/env bash
2+
3+
set -o errexit
4+
set -o nounset
5+
set -o pipefail
6+
7+
SCRIPT_DIR=$(dirname -- "$(readlink -f "${BASH_SOURCE[0]}" || realpath "${BASH_SOURCE[0]}")")
8+
9+
main() {
10+
11+
local provider_token=
12+
local PLATFORM=docker
13+
local service_mesh_adapter=
14+
15+
parse_command_line "$@"
16+
17+
echo "Checking if a k8s cluster exits..."
18+
if kubectl config current-context
19+
then
20+
echo "Cluster found"
21+
else
22+
printf "Cluster not found. \nCreating one...\n"
23+
create_k8s_cluster
24+
echo "Cluster created successfully!"
25+
fi
26+
27+
if [[ -z $provider_token ]]
28+
then
29+
printf "Token not provided.\n Using local provider..."
30+
echo '{ "meshery-provider": "None", "token": null }' | jq -c '.token = ""'> ~/auth.json
31+
else
32+
echo '{ "meshery-provider": "Meshery", "token": null }' | jq -c '.token = "'$provider_token'"' > ~/auth.json
33+
fi
34+
35+
kubectl config view --minify --flatten > ~/minified_config
36+
mv ~/minified_config ~/.kube/config
37+
38+
curl -L https://git.io/meshery | DEPLOY_MESHERY=false bash -
39+
40+
mesheryctl system context create new-context --adapters $service_mesh_adapter --platform docker --url http://localhost:9081 --set --yes
41+
42+
mesheryctl system start --yes
43+
44+
sleep 30
45+
}
46+
47+
create_k8s_cluster() {
48+
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
49+
sudo install minikube-linux-amd64 /usr/local/bin/minikube
50+
sudo apt update -y
51+
sudo apt install conntrack
52+
minikube version
53+
minikube start --driver=docker --kubernetes-version=v1.20.7
54+
sleep 40
55+
}
56+
57+
wait_for_docker() {
58+
while :
59+
do
60+
if docker version -f '{{.Server.Version}} - {{.Client.Version}}'
61+
then
62+
break
63+
else
64+
sleep 5
65+
fi
66+
done
67+
}
68+
69+
meshery_config() {
70+
mkdir ~/.meshery
71+
config='{"contexts":{"local":{"endpoint":"http://localhost:9081","token":"Default","platform":"docker","adapters":[],"channel":"stable","version":"latest"}},"current-context":"local","tokens":[{"location":"auth.json","name":"Default"}]}'
72+
73+
echo $config | yq e '."contexts"."local"."adapters"[0]="'$1'"' -P - > ~/.meshery/config.yaml
74+
75+
cat ~/.meshery/config.yaml
76+
}
77+
78+
parse_command_line() {
79+
while :
80+
do
81+
case "${1:-}" in
82+
-t|--provider-token)
83+
if [[ -n "${2:-}" ]]; then
84+
provider_token=$2
85+
shift
86+
else
87+
echo "ERROR: '-t|--provider_token' cannot be empty." >&2
88+
exit 1
89+
fi
90+
;;
91+
-p|--platform)
92+
if [[ -n "${2:-}" ]]; then
93+
PLATFORM=$2
94+
shift
95+
else
96+
echo "ERROR: '-p|--platform' cannot be empty." >&2
97+
exit 1
98+
fi
99+
;;
100+
--service-mesh)
101+
if [[ -n "${2:-}" ]]; then
102+
service_mesh_adapter=meshery-$2
103+
shift
104+
else
105+
echo "ERROR: '--service-mesh' cannot be empty." >&2
106+
exit 1
107+
fi
108+
;;
109+
*)
110+
break
111+
;;
112+
esac
113+
shift
114+
done
115+
}
116+
117+
main "$@"

mesheryctl.sh

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
#!/usr/bin/env bash
2+
3+
set -o errexit
4+
set -o nounset
5+
set -o pipefail
6+
7+
SCRIPT_DIR=$(dirname -- "$(readlink -f "${BASH_SOURCE[0]}" || realpath "${BASH_SOURCE[0]}")")
8+
9+
declare -A adapters
10+
adapters["istio"]=meshery-istio:10000
11+
adapters["linkerd"]=meshery-linkerd:10001
12+
adapters["consul"]=meshery-consul:10002
13+
adapters["octarine"]=meshery-octarine:10003
14+
adapters["nsm"]=meshery-nsm:10004
15+
adapters["network_service_mesh"]=meshery-nsm:10004
16+
adapters["kuma"]=meshery-kuma:10007
17+
adapters["cpx"]=meshery-cpx:10008
18+
adapters["osm"]=meshery-osm:10009
19+
adapters["open_service_mesh"]=meshery-osm:10009
20+
adapters["traefik-mesh"]=meshery-traefik-mesh:10006
21+
adapters["traefik_mesh"]=meshery-traefik-mesh:10006
22+
23+
main() {
24+
25+
local pattern_filename=pat.yml
26+
local service_mesh="istio"
27+
local service_mesh_adapter=
28+
local url="https://raw.githubusercontent.com/service-mesh-patterns/service-mesh-patterns/master/samples/IstioFilterPattern.yaml"
29+
30+
31+
parse_command_line "$@"
32+
33+
shortName=$(echo ${adapters["$service_mesh"]} | cut -d '-' -f2 | cut -d ':' -f1)
34+
35+
docker network connect bridge meshery_meshery_1
36+
docker network connect minikube meshery_meshery_1
37+
docker network connect bridge meshery_meshery-"$shortName"_1
38+
docker network connect minikube meshery_meshery-"$shortName"_1
39+
40+
mesheryctl system config minikube -t ~/auth.json
41+
echo "Deploying $service_mesh..."
42+
mesheryctl mesh deploy --adapter $service_mesh_adapter -t ~/auth.json $service_mesh
43+
sleep 30
44+
docker ps
45+
mesheryctl pattern apply --file $url -t ~/auth.json
46+
sleep 30s
47+
kubectl get all --all-namespaces
48+
}
49+
50+
parse_command_line() {
51+
while :
52+
do
53+
case "${1:-}" in
54+
--service-mesh)
55+
if [[ -n "${2:-}" ]]; then
56+
service_mesh=$2
57+
service_mesh_adapter=${adapters["$2"]}
58+
shift
59+
else
60+
echo "ERROR: '--service-mesh' cannot be empty." >&2
61+
exit 1
62+
fi
63+
;;
64+
# --pattern-filename)
65+
# if [[ -n "${2:-}" ]]; then
66+
# pattern_filename=$2
67+
# shift
68+
# else
69+
# echo "ERROR: '--pattern-filename' cannot be empty." >&2
70+
# exit 1
71+
# fi
72+
# ;;
73+
*)
74+
break
75+
;;
76+
esac
77+
shift
78+
done
79+
}
80+
81+
main "$@"

0 commit comments

Comments
 (0)