#!/usr/bin/env bash
ROOT="$(dirname $0)/.."
SCHEME="https:"
allItems=""
process () {
SWAGGER_FILE=$1
LOGIN=$2
PASSW=$3
if [ ! -e "${SWAGGER_FILE}" ]; then
echo "No swagger file !"
return 1
fi
SWAGGER_DIRECTORY=$(dirname "${SWAGGER_FILE}")
SWAGGER_CONTENT=$()
NAME=$(basename "${SWAGGER_DIRECTORY}")
TITLE=$(cat "${SWAGGER_FILE}"|jq .info.title)
if [ "${TITLE:-null}" = "null" ]
then
logger -s "${NAME} - ERROR: swagger has no title !"
return 2
fi
SUMMARY=$(cat "${SWAGGER_FILE}"|jq .info.summary)
if [ "${SUMMARY:-null}" = "null" ]
then
logger -s "${NAME} - ERROR: swagger has no summary !"
return 3
fi
SERVERS=$(cat "${SWAGGER_FILE}"|jq -r ".servers")
if [ "${SERVERS:-null}" = "null" ]
then
logger -s "${NAME} - ERROR: swagger has no servers!"
return 4
fi
URL=$(cat "${SWAGGER_FILE}"|jq -r ".servers[] | select(.\"x-profil\").url"|sed -e "s/^/ - url: /")
if [ "${URL:-null}" = "null" ]
then
logger -s "${NAME} - ERROR: swagger has no url !"
return 5
fi
# First profil will be used for all url
PROFIL=$(cat "${SWAGGER_FILE}"|jq -r ".servers[] | select(.\"x-profil\").\"x-profil\""|head -n 1)
case ${PROFIL} in
Standard | Deprecated | Reserved | Administrator )
echo -n "${NAME} - ${PROFIL} - "
;;
* )
logger -s "${NAME} - ERROR: swagger has no valid x-profil !"
return 6
;;
esac
CURL_OUTFILE=$(tempfile)
cat <<EOF | curl --silent --user "${LOGIN}:${PASSW}" -T - "http://vpdaf.intra.inist.fr:35270/internal-proxy-1/data/${NAME}.yml" --digest --write-out %{http_code} --output /dev/null > ${CURL_OUTFILE}
http:
routers:
Router-${NAME}:
entryPoints:
- "web"
middlewares:
- "Middleware-${PROFIL}"
service: "Service-${NAME}"
rule: "Host(\`${NAME}.services.istex.fr\`, \`${NAME}.services.inist.fr\`)"
services:
Service-${NAME}:
loadBalancer:
servers:
${URL}
EOF
HTTP_CODE=$(cat ${CURL_OUTFILE}; rm ${CURL_OUTFILE})
echo -n "${HTTP_CODE} - "
CURL_OUTFILE=$(tempfile)
cat <<EOF | curl --silent --user "${LOGIN}:${PASSW}" -T - "http://vpdaf.intra.inist.fr:35270/internal-metrics-1/data/config/${NAME}.yml" --digest --write-out %{http_code} --output /dev/null > ${CURL_OUTFILE}
- job_name: '${NAME}'
scrape_interval: 10s
scheme: https
static_configs:
- targets: ['${NAME}.services.istex.fr']
EOF
HTTP_CODE=$(cat ${CURL_OUTFILE}; rm ${CURL_OUTFILE})
echo "${HTTP_CODE}"
allItems+="{ url: \"${SCHEME}//${NAME}.services.istex.fr\", name: ${TITLE} },"
return 0
}
FILES=$(ls ${ROOT}/*/swagger.json)
echo -n "Login: "
read login
echo -n "Password: "
read -s passw
echo " "
for swagger in ${FILES}
do
process "$swagger" "$login" "$passw"
done
echo -n "open-api - Swagger - "
CURL_OUTFILE=$(tempfile)
cat <<EOF | curl --silent --user "${login}:${passw}" -T - "http://vpdaf.intra.inist.fr:35270/open-api-1/data/swagger-initializer.js" --digest --write-out %{http_code} --output /dev/null > ${CURL_OUTFILE}
window.onload = function() {
//<editor-fold desc="Changeable Configuration Block">
// the following lines will be replaced by docker/configurator, when it runs in a docker-container
window.ui = SwaggerUIBundle({
urls: [
${allItems}
],
dom_id: '#swagger-ui',
deepLinking: true,
presets: [
SwaggerUIBundle.presets.apis,
SwaggerUIStandalonePreset
],
plugins: [
SwaggerUIBundle.plugins.DownloadUrl
],
layout: "StandaloneLayout"
});
//</editor-fold>
};
EOF
HTTP_CODE=$(cat ${CURL_OUTFILE}; rm ${CURL_OUTFILE})
echo "${HTTP_CODE}"