#!/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}"