004_CreateGatewayRoute.sh 2.99 KB
Newer Older
据说甜蜜呢 committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
#!/bin/bash
set -e
IFS=$'\n\n'

declare appName=($(grep -oP '(?<=AppName>)[^<]+' "devops/app.props"))

echo "Start building the gateway for ${appName} route dynamically..."

declare namespace=($(grep -oP '(?<=Namespace>)[^<]+' "devops/app.props"))
declare namespaceOfK8s=$(echo "${appName}-v${major}" | tr 'A-Z' 'a-z')
declare fdnOfK8s="${namespaceOfK8s}.svc.cluster.local"
declare kongServiceUrl=($(grep -oP '(?<=Namespace>)[^<]+' "devops/app.props"))
declare major=($(grep -oP '(?<=Major>)[^<]+' "devops/version.props"))
declare releaseVersion="v${major}"

# resilience handle
# Maximum time in seconds that you allow the whole operation to take.
declare maxTime=5 
# Maximum time in seconds that you allow the connection to the server to take.
declare maxConnectTime=2
declare retryCount=5

## add services
function createService()
{
	curl -X POST $1 \
	--connect-timeout $2 \
	--max-time $3 \
	--retry $4 \
	-H  "accept: application/json" \
	-H  "Content-Type: application/json" \
	-d "{ \"name\": \"$5\",  \"url\": \"$6\"}";
}

## add routes
function createRoute()
{
    declare svcResponse=$(curl -X GET ${kongServiceBaseUrl}/$5 --connect-timeout $2 --max-time $3 --retry $4)
    declare JQ_EXEC=`which jq`
    declare svcId=$(echo $svcResponse | ${JQ_EXEC} .id | sed 's/\"//g')
	declare defMethods="[\"GET\",\"POST\"]"

	set +e
	if [ -n "$8" ]; then
	   defMethods=$8
	fi

	if [ -z "$svcId" ]; then
	  echo "Warnning, failed to get the service[$5] identifier, route cannot be created.";
    else
	  # idempotent
	  declare routesAdded=$(curl -X GET ${kongServiceBaseUrl}/$5/routes)
	  declare routeid=$(echo $routesAdded | ${JQ_EXEC} .data[0].id | sed 's/\"//g')
	  if [ "$routeid" == "null" ]; then
        curl -X POST $1 \
	    --connect-timeout $2 \
	    --max-time $3 \
	    --retry $4 \
	    -H  "accept: application/json" \
	    -H  "Content-Type: application/json" \
	    -d "{ \"service\": "{\"id\":\"$svcId\"}",\"paths\": "[\"$6\"]",\"methods\": "$defMethods",\"strip_path\":$7,\"hosts\": "[\"$kongRouteDomain\"]"}";
      fi
	fi
	set -e
}

declare services=$(ls -l src/services | awk 'NR>1')
declare servicePrefix=""
declare serviceName=""
declare serviceNameWithVersion=""
declare serviceFullName=""
declare serviceUrl=""
declare serviceRouteUrl=""
for service in ${services}
do
  servicePrefix=($(echo ${service} | awk '{print $9}')) 
  serviceName="${servicePrefix}-api"
  serviceNameWithVersion="${serviceName}-${releaseVersion}"
  serviceFullName="${serviceName}.${fdnOfK8s}"
  serviceUrl="http://${serviceFullName}/api/${servicePrefix}"

  echo "Begin creating service[${serviceNameWithVersion}]"
  createService ${kongServiceUrl} ${maxConnectTime} ${maxTime} ${retryCount} ${serviceNameWithVersion} ${serviceUrl}

  echo "Begin creating route of service[${serviceNameWithVersion}]" 
  serviceRouteUrl="/api/${releaseVersion}/${servicePrefix}"
  createRoute ${kongServiceUrl} ${maxConnectTime} ${maxTime} ${retryCount} ${serviceNameWithVersion} ${serviceRouteUrl} true
done

echo ""
echo "Dynamicly building gateway route successfully !!!"